פורסם 2010 במרץ 2215 שנים היי, ערב טוב השאלה: אני מתקשה בחלק של המפענח (האחרון). אני לא יודע איך ליצור את הנוסחא שתמיר תווים כמו התו האחרון בדוגמא שנתנו שהופך להיות x. כלומר, זה משהו בסגנון של: zz (Wi - 'a' - i) [?] + 'a' zz כאשר אני לא יודע איזה פעולה לעשות במקום של הסימן שאלה כך שזה יצא נכון. אפשר עזרה?
פורסם 2010 במרץ 2215 שנים מחבר את זה אני יודע אמרתי שעשיתי את החלק הראשון, אני לא יודע לעשות את החלק השני. אי אפשר לעשות בו מודולו, זה לא יפתור את השאלה.
פורסם 2010 במרץ 2215 שנים הבנתי, זה לא כל כך היה ברור מהשאלה.הבעיה היא כמובן שמודולו של מספר שלילי לא עובד כמו שהיית מצפה, מה שאומר שאתה צריך לדאוג שהמספר תמיד יהיה חיובי.
פורסם 2010 במרץ 2215 שנים מחבר אם נסתכל רגע על הדוגמא ועל האות d במקום ה-6 -> i=6הערך המספרי של d הוא 100של x הוא 120zz (100-97-6)%26+97=-3%26+97=-3+97=94גם אם המודול היה נותן 3 במקום 3- זה לא היה עוזר..
פורסם 2010 במרץ 2215 שנים תפריד לתחומים, כל עוד getchar()-i>=97 וגם getchar()-i<=122 אין בעיהלתחומים הנוספים תגדיר פעולות - לכל אחד מהם שיזרוק את הערכים חזרה לטווח שאתה מכירנניח מוגדר i>0, אתה מוסיף את i לערך של האות ומחסר 26. נניח שהאות בקוד היא y ו-i=3, אתה תקבל אתה מקבל 121+3-26=98 שזה בדיוק bאותו סיפור ל-i<0, רק שפה אתה מחבר את הערך של האות פלוס 26 פלוס i.נניח אות בקוד b ו-i=-3 אתה מקבל 98+26-3=121 שזה בדיוק y
פורסם 2010 במרץ 2215 שנים מחבר המטרה בתרגיל היתה לא להשתמש בלולאות או תנאיםאתה בטוח שאין דרך לעשות את זה אחרת?
פורסם 2010 במרץ 2215 שנים טוב, קצת מתמטיקה:לפעולת מודולו (במתמטיקה, לא ב-C) יש תכונה שעבור מספר כלשהו טבעי m ומספר כלשהו שלם x, תמיד יתקיים:x % m == (x+m) %mזה נכון גם אם x הוא שלילי. הבעיה היא שב-C, פעולת המודולו פשוט לא עובדת נכון עבור מספרים שליליים (3- מודולו 26 לא אמור להיות 3-, אלא 23). בגלל זה צריך להשתמש בשוויון לעיל בשביל להפוך את x למספר חיובי לפני שמפעילים עליו מודולו. יש מבין?
פורסם 2010 במרץ 2315 שנים מחבר האמת היא שכבר אתמול בלילה הבנתי איך לעשות את זה הבוקר ניסיתי ליישם ומשום מה זה לא עובד. קודם כל, זה לא עוצר איפה שעשיתי SCANF בסוף, זה פשוט מדלג עליו ומסיים את התכנית. ניסיתי גם להוציא את הפלט והוא יצא שגוי ממה שציפיתי.. ניסיתי לעשות מקרה פרטי בתכנית נפרדת של רק אות אחת וזה כן עבד אז אני פשוט לא מבין מה לא נכון במה שכתבתי: #include <stdio.h>int main (void) {char w_1, w_2, w_3, w_4, w_5, w_6;int i;printf("please insert a six letter word that you would like to encrypt\n"); scanf("%c", &w_1);scanf("%c", &w_2);scanf("%c", &w_3);scanf("%c", &w_4);scanf("%c", &w_5);scanf("%c", &w_6);printf("the encrypt word is: %c%c%c%c%c%c\n", ((w_1-'a'+1)%26+'a'), ((w_2-'a'+2)%26+'a'), ((w_3-'a'+3)%26+'a'), ((w_4-'a'+4)%26+'a'), ((w_5-'a'+5)%26+'a'), ((w_6-'a'+6)%26+'a')); printf("please enter a six letter word that you would like to decrypt\n"); scanf("%c", &w_1);scanf("%c", &w_2);scanf("%c", &w_3);scanf("%c", &w_4);scanf("%c", &w_5);scanf("%c", &w_6);printf("the decrypted word is: %c%c%c%c%c%c\n", ((w_1-'a'-1)+26)%26+'a', ((w_2-'a'-2)+26)%26+'a', ((w_3-'a'-3)+26)%26+'a', ((w_4-'a'-4)+26)%26+'a', ((w_5-'a'-5)+26)%26+'a', ((w_6-'a'-6)+26)%26+'a'); scanf("%d", &i); /*stop*/return 0; }
פורסם 2010 במרץ 2315 שנים זה בגלל איך שעובדת הפונקציה scanf עם c%.אני מניח שהקלדת את המילה כשבסופה עשית Enter, נכון? אז ("scanf("%c לא מדלגת על ה-enter אלא קוראת אותו, וזה מה שגורם לך לבעיה.הפתרון הוא אחת משלוש האפשרויות:לקרוא את המילה כמחרוזת אחת (בשביל זה תצטרך להגדיר מערך של char ולהשתמש ב-("scanf("%s),לעשות (fflush(stdin כשאתה מסיים לקרוא כל מילה,או שכל scanf יכיל רווח לפני ה-c%, כלומר ("scanf(" %c, כי זה אומר לו לדלג על רווחים וירידות שורה.יש?
פורסם 2010 במרץ 2315 שנים מחבר תודה שניצל, זה עובדאבל איך אתה מסביר שהחלק הראשון של השאלה עבד בסדר גם בלי הרווחים? (ה- 6 SCANFים הראשונים) וכן עצר כשרציתי, אבל בחלק השני זה לא עבד? הרי אין ביניהם הבדל
פורסם 2010 במרץ 2315 שנים כי המילה הראשונה באמת הייתה 6 התווים הראשונים בקלט. הבעיה היא שהתו הבא, שציפית שיהיה התו הראשון של המילה השנייה, היה למעשה תו ירידת שורה.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.