פורסם 2009 בנובמבר 2316 שנים כתבתי תוכנית ב- C שעובדת אצלי מצויין בבית עם הקומפיילר של DEV C++ 4.9.9.2.כשניסיתי להריץ אותה במחשבים של אוניברסיטת בר אילן בעזרת הקומפיילר gcc התוכנית לא עבדה כמו שצריך.משום מה בפעולה BinariesSum הלולאהלא נגמרת מתי שהיא נגמרת על המחשב שלי.ישבתי על זה המון זמן ועדיין לא הצלחתי למצוא פיתרון.מישהו יכול לעזור? (כל הפרוייקט שלי בבית מצורף)[attachment deleted by admin]
פורסם 2009 בנובמבר 2316 שנים איזה קלטים אתה מזין? זה קורה בכל קלט? אתה בטוח שאין לך overflow?נסה להשתמש בהדפסות עזר בפונקציה BinariesSum, או אפילו בדיבאגר.
פורסם 2009 בנובמבר 2516 שנים מחבר רק רציתי לציין שבבית אני עובד עם Windows ובאוניברסיטה מותקן Linux.הקלט תמיד תקין (זו הנחה של התרגיל) (זה לא עובד על השרתים גם אם אני נותן לדוגמה 11 ו- 13).קודם כל, אין לי אפשרות להפעיל דיבאגר על השרתים של האוניברסיטה אז ניסיתי עם הדפסות עזר.בדקתי וגיליתי שהפעולה binary1 / i עובדת כמו שצריך אבל binary2 / i לא.הבנתי שהבעיה היא עם הפעולה binary2 / i. משום מה זה מחזיר מספר לא נכון.binary2 / 1 הוא מחזיר תוצאה נכונה אבל binary2 / 10 והלאה (i גדול יותר) התוצאה שגויה.בדקתי ואכן binary2 לא משתנה והוא המספר הנכון וגם i גדל כל פעם פי 10.אני לא מבין למה התוצאה של החישוב שגויה.מישהו יכול לעזור? (רק בבקשה עד יום חמישי הקרוב כי אני צריך להגיש את התרגיל עד חצות).
פורסם 2009 בנובמבר 2516 שנים איפה בקוד שלך יש binary2 / i? מה זה אומר "לא עובד כמו שצריך"? מה הערכים שלהם, ומה התוצאה?כמו שאמרתי, אם אתה לא יכול לדבג אז שים הדפסות עזר. תוסיף הרבה הדפסות- בכל איטרציה תדפיס את כל המשתנים שלך, בכל כניסה לפונקציה תדפיס את הפרמטרים וכד'.
פורסם 2009 בנובמבר 2516 שנים מחבר זה מה שעשיתי וראיתי שהחישוב של binary2 / i בפעולה BinariesSum לא מתבצע כמו שצריך.לדוגמה אם binary2 = 1101 ו- i = 10 התוצאה שאני מקבל על השרתים של האוניברסיטה היא 2147483758.התוצאה בפועל אמורה להיות 110.
פורסם 2009 בנובמבר 2516 שנים תעלה את הקוד המלא כאן, כולל הדפסות העזר שלך (בקוד שהעלית קודם אין שום מקום בו מופיע binary2/i)
פורסם 2009 בנובמבר 2516 שנים מחבר סליחה, טעות שלי. פשוט שיניתי את הפונקציה. (דרך אגב גם הקוד הראשון לא עובד על השרתים של האוניברסיטה).הנה הקוד:#include <stdio.h>void PrintBinariesSum(unsigned long decimal1, unsigned long decimal2);unsigned long ConvertDecimalToBinary(unsigned long decimal);unsigned long BinariesSum(unsigned long binary1, unsigned long binary2);int main(){ unsigned long num1, num2; scanf("%u %u", &num1, &num2); PrintBinariesSum(num1, num2); return 0;}void PrintBinariesSum(unsigned long decimal1, unsigned long decimal2){ unsigned long binNumber1, binNumber2, sum; // Getting the binary presentation of the two numbers binNumber1 = ConvertDecimalToBinary(decimal1); binNumber2 = ConvertDecimalToBinary(decimal2); // Getting the sum of the numbers sum = BinariesSum(binNumber1, binNumber2); // Printing the numbers printf("%10d\n", binNumber1); printf("%10d\n", binNumber2); printf("%10d\n", sum);}unsigned long ConvertDecimalToBinary(unsigned long decimal){ unsigned long tempNum, power, binNumber; // Calculating the power of the binary number tempNum = decimal; for (power = 1; tempNum >= power * 2; power *= 2); // Calculating the binary number tempNum = decimal; binNumber = 0; for (; (power > 0) || (tempNum > 0); power /= 2) { binNumber = (binNumber * 10) + (tempNum / power); tempNum -= (tempNum / power) * power; } return binNumber;}unsigned long BinariesSum(unsigned long binary1, unsigned long binary2){ unsigned long i, sum, carriage, digit; sum = 0; carriage = 0; // Passing all the digits for (i = 1; i <= 1000000000; i *= 10) { // Calculating the digit digit = carriage + (binary1 / i) % 10 + (binary2 / i) % 10; carriage = 0; // Updating the carriage if (digit > 1) { carriage = 1; digit -= 2; } // Adding the digit sum += digit * i; } return sum;}
פורסם 2009 בנובמבר 2516 שנים כשאתה קורא לתוך unsigned long אתה אמור להשתמש ב-lu% ולא u%. אני לא יודע אם ההבדל מהותי, אבל בכל מקרה זה עדיף.מה הערכים של binary1,binary2 בכניסה לפונקציה? מה התוצאה? תן עוד פרטים.
פורסם 2009 בנובמבר 2616 שנים מחבר הפונקציה מקבלת שני מספרים בינריים ומחזירה את הסכום הבינרי שלהם.אחת ההגבלות של התרגיל היא שאני חייב קודם להמיר אותם לבינרי ואז לבצע חיבור בינריים.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.