ZAMYLA צ'אן: מזל טוב בגמר שלך כמה תוכניות C הראשון. אני יודע שההסתערות הראשונה שלך לתוך תחביר C יכול להיות מרתיע. אבל אני מבטיח לך, בסופו של כמובן, אתה יכול להסתכל על כמה משימות ראשונה ו להשלים אותם בתוך דקות. עכשיו שאתה מקבל יותר מוכר עם תחביר, בואו לקבל לקיסר. בקיסר, המשתמש יגיש מפתח שלם כשורת פקודת ויכוח, ולאחר מכן להזין רגיל הודעת טקסט בשורת הפקודה. אז תכנית צופן הטקסט וההדפסה ההודעה המוצפנת שלהם. Enciphering לקיסר הוא די פשוט. Shift כל אות, בהם טקסט רגיל, על ידי המפתח. כתוצאה מכך, זה גם די חסר ביטחון. אבל ליישם את הקיסר יציג לנו נתונים ומערך ASCIIMath מבנים. אנחנו נגיע למורכבים יותר צופן מאוחר יותר. עם מפתח של קיסר 2, מכתב ב טקסט רגיל יהיה מיוצג על ידי ג במכתב מוצפן כי C הוא שתי אותיות א 'ב' לאחר תהיה מיוצג על ידי D ו-C על ידי א 'לקראת סופו של האלפבית, W הוא מיוצג על ידי Y, X ועל ידי צ'אבל Y אין שתי אותיות אחרי זה, אז את צופן עוטף את האלפבית. Y בטקסט רגיל ובכך מיוצג על ידי בהודעה המוצפנת, ו-Z על ידי ב 'זה אולי לעזור לצפייה בסייפר הקיסר כמו גלגל האלפבית רציף. כדי להצפין את הטקסט שלהם, המשתמש ייכנס שני טיעונים לשורת הפקודה - . / קיסר ואחריו מפתח. כמו תמיד, אנחנו לא יכולים לסמוך על המשתמש לחלוטין להזנת קלט שעושה מובן לתכנית שלנו. אז אנחנו נצטרך לאמת אותם קלט שורת הפקודה. במקום להשתמש בחלל עיקרי int, אנחנו באמצעות תכנית + int ראשי, int, מחרוזת argv. Argc משתנה השלם מייצג מספר הארגומנטים שמועברים ל בשורת הפקודה. וargv הוא מערך, או לחשוב על זה כעל רשימה, הטיעונים עברה פנימה אז לקיסר, איך אנחנו לאמת הקלט של המשתמש? ובכן, הם צריכים רק להיכנס שני טיעוני שורת הפקודה - . / קיסר ומפתח. אז אם argc הוא לא 2, זה אומר ש הם גם שכחו את מפתח ורק נכנס. / קיסר, או שהם נכנס מספר מפתחות. אם זה המקרה, אז אתה רוצה הוראות להדפסה ולצאת מהתכנית. הם יצטרכו לנסות שוב משורת הפקודה. אבל גם אם argc הוא 2, אתה צריך לבדוק אם הם אתן לך מפתח חוקי. לקיסר, אתה צריך מספר שלם. אבל argv הוא מערך של מחרוזות. איך לגשת למפתח זה? מבט מהיר על מערכים - מבני נתונים המחזיקים במספר רב של ערכים מאותו סוג נתונים. ערכים הם אפס למדד, כלומר המרכיב הראשון הוא אפס המדד והאלמנט האחרון הוא בגודל אינדקס 1 מינוס, שבו גודל הוא מספר אלמנטים במערך. אם אני הכריז תיבת דואר של מערך מחרוזת חדשה אורך של 3, מבחינה ויזואלית, זה נראה כך. שלוש מכולות למחרוזות , זה לצד זה. כדי לגשת לכל אלמנט, אתה מקליד את השם של המערך ולאחר מכן מצביע על המדד בסוגריים מרובעים. הנה, אני הקצאת ערך לכל אחד אלמנט, בדיוק כפי שהייתי עושה עם כל משתנה מחרוזת אחרת. אז לגשת לשורת פקודת הטיעונים שלנו, כל מה שאנחנו צריכים לעשות הוא לגשת האלמנט הנכון של מערך argv. אם המשתמש נכנס צוות. / Blastoff רקטות לעבר המסוף, argv 0 הייתם להיות. / blastoff. argv יהיה צוות, ו ARG2 יהיה טילים. עכשיו אנחנו יכולים לגשת המפתח שלנו, אנחנו עדיין צריכים לעשות בטוח שזה נכון. אנחנו צריכים להפוך אותו למספר שלם. אבל אנחנו לא יכולים פשוט להטיל כמו מה שעשינו בעבר. למזלנו, לפונקצית Y דואגת זה בשבילנו, ואפילו מחזיר 0 אם לא ניתן להמיר את המחרוזת למספר שלם. זה תלוי בך, אם כי, כדי לספר המשתמש למה אתה לא לתת התכנית להמשיך. אחסן את התוצאה ל Y ב מספר שלם, ויש לך את המפתח שלך. החלק הבא הוא פשוט. תנחה את המשתמש לטקסט רגיל שלהם, שיהיה מסוג מחרוזת הנתונים. למזלנו, כל המשתמש שהוזנו מחרוזות הן חוקיות. עכשיו שיש לנו את כל הקלט הדרוש מהמשתמש, זה זמן בשבילנו להצפין את המסר שלהם. הרעיון של קיסר הוא פשוט מספיק כדי להבין. אבל איך יודע שהמחשב שלך מכתבים הגיעו לאחר עוד אחד? כאן מקום טבלת ASCII נכנס לכל תו מספר שלם מספר משויך אליו. הון הוא 65. ההון ב 'הוא 66. אותיות קטנות הוא 97. ב אותיות קטנות הוא 98. אבל דמויות לא מוגבלות לרק מספרי האלפבית. לדוגמה, סימן @ 64 הוא מספר ASCII. לפני ההתמודדות עם כל המחרוזת, בואו נעמיד פנים שאנחנו פשוט צריכים לעבור תו אחד. ובכן, אנחנו רק רוצים להעביר בפועל אותיות בטקסט רגיל, ולא תווים או מספרים. אז הדבר הראשון שאנחנו רוצים לבדוק הוא אם הדמות היא ב האלפבית. Isalpha הפונקציה עושה את זה בשביל שלנו ומחזיר בוליאני - נכון, אם הדמויות הוא מכתב, שקר, אם בדרך אחרת. שתי פונקציות שימושיות אחרות isupper וislower, עם שמות מובן מאליו. הם חוזרים נכון אם התו נתון הוא אותיות גדולות או קטנה, בהתאמה. מאז הם Booleans, הם שימושית לשימוש כתנאים. אם isalpha מחזיר אמיתי, תצטרך להעביר את הדמות שעל ידי המפתח. אז בואו תפתחו לASCIIMath ולעשות קצת מתמטיקה ASCII. השימוש דומה מאוד לשימוש לקיסר ולוקח במפתח ב שורת הפקודה. אם אני מפעיל ASCIIMath 5, נראה שזה יוסיף 5 ל, נותן לי את המכתב F, ו הצגת ערך ASCII. אז בואו נסתכל על התכנית. אתם עשויים לתהות, ממש כאן, למה מכתב הוא מספר שלם, כאשר זה באופן ברור, טוב, מכתב. מתברר שדמויות ו מספרים שלמים וניתנים להחלפה. על ידי לשים את המכתב באחד מרכאות, המספר השלם יכולים לאחסן ערך ASCII של בירה א 'תיזהר, אם כי. אתה צריך את בגדים בודדים. בלי מרכאות בודדות, המהדר הייתי מחפש משתנה בשם, ולא אופי. ואז אני מוסיף מכתב ומפתח, אחסון סכום בתוצאת משתני int. למרות שתוצאה היא מסוג הנתונים מספר שלם, הצהרת printf משתמשת % מציין מיקום ג לתווים. אז התכנית מדפיסה את התו קשור עם תוצאת המספר השלם. ומאחר שהדפסנו את המספר השלם טופס גם באמצעות% d, אנו רואים המספר גם כן. אז עכשיו אתה יכול לראות שאנחנו טיפול בדמויות ו מספרים שלמים, ולהיפך. בואו לבדוק כמה ASCIIMath יותר פעמים באמצעות 25 כמפתח. אנחנו מקבלים את אות Z. עכשיו אנחנו מנסים 26. אנחנו רוצים לקבל את המכתב, אבל במקום זה אנחנו מקבלים סוגר שמאלי. אז ברור, רק מוסיף מפתח למכתב לא יעשה. אנחנו צריכים להבין את נוסחה כדי לעטוף מסביב לאותיות, כמו שלנו למשל בהתחלה עשה את זה. נוסחה לקיסר שינוי הוא כדלקמן. ג עמ 'שווה בתוספת K מודולו 26. זכור כי מודולו הוא שימושי מבצע שנותן לנו את השארית של חלוקת מספר אחד על ידי השנייה. בואו ליישם את נוסחה הזאת למישור מכתב טקסט עם מפתח של 2. ערך ASCII של Y הוא 89, אשר נותן לנו 91 מודולו 26, אשר שווה 13 - בהחלט לא ערך ASCII של, שהוא 67. לרצות אותי עכשיו ולהתרחק ערכי ASCII למדד אלפביתי שבו הוא אפס וZ הוא 25, כלומר Y הוא 24. 24 2 בתוספת, 6 מודולו, נותנת לנו 26, 26 מודולו, 0, שהוא אינדקס אלפביתי של. כך נראית נוסחה זו שתחול על אינדקס אלפביתי של המכתב ו הערך שלו לא ASCII. אבל אתה מתחיל עם ערכי ASCII. ולהדפיס את התו המוצפן, תצטרך ערך ASCII שלו גם כן. זה תלוי בך, אם כן, כדי להבין איך לעבור קדימה ואחורה. ברגע שאתה להבין את נוסחה הנכונה עבור תו אחד, כל מה שאתה צריך לעשות הוא להחיל את אותה נוסחה לכל מכתב בטקסט רגיל - רק אם אות זו היא אלפביתי, כמובן. וזכור כי אתה צריך לשמור המקרה, עליון או תחתון, זה שבו isUpper ופונקציות isLower ציינו קודם לכן יהיה שימושי. אולי יש לך שתי נוסחאות - אחד לאותיות רישיות ואחת לאותיות קטנות. אז isUpper isLower יעזור לך לקבוע איזו נוסחה ליישם. איך ליישם את נוסחת שלך לכל תו בודד במחרוזת? ובכן, היא פשוט מחרוזת מערך של תווים. אז אתה יכול לגשת לכל תו על ידי קיבוץ על כל דמות ב מחרוזת ללולאה. באשר למצבו שלך ללולאה, פונקצית strlen, למחרוזת האורך, יהיה שימושי. זה לוקח במחרוזת כקלט ו מחזיר את האורך של מחרוזת ש. הקפד לכלול את הספרייה הנכונה כדי להשתמש בפונקצית אורך המחרוזת. ויש לך הודעה המוצפנת שלך. השם שלי הוא Zamyla. ו[ קוד דיבור לפני].