פורסם 2005 במאי 220 שנים אהלן, אנשים יש לי שאלה, שנתקעתי איתה לקראת הסוף. כתוב תכנית אשר הקלט שלה מספר המציין אורך מילה, ואחריו המלה באותיות אנגליות (גדולות וקטנות) והפלט שלה הוא הצפנה של המילה על-ידי החלפת כל אות על פי החוקיות הבאה: האות A מוחלפת באות Z, האות B מוחלפת באות Y וכן הלאה, האות a מוחלפת באות z, האות b מוחלפת באות y וכן הלאה. הערות: אין צורך לבדוק ערך מוחזר ע"י scanf/getchar אם תו קלט הוא לא אות אלפבית, התוכנית יודיע שגיאה ותסתיים. אלפבית האנגלי: A B C D E F G H I J K L M N O P Q R S T U C W X Y Z דוגמא: Enter the word length and the word immediately after it: 5abCdE zyXwV is a encoded word.זה הקוד, שכתבתי, שאכן הופך את האותיות למקודדות כנדרש, אך אני לא מצליח לכתוב אותן בסדר הנדרש בשאלה, כלומר אני הופך אותן אות אחר אות ולא מצליח לקרוא ולהדפיס אותן בסדר הנדרש בדוגמה. בפתרון אסור להשתמש במחרוזות , מערכים ופוינטרים אלא רק במשפטי תנאי ולולאות. תודה מראש על העזרה. #include<stdio.h>int main(){ int length;int i;int check; char letter;char check_letter;char coded_letter; printf ("\nEnter the word length and the word immediately after it: "); if (scanf("%d",&length)!=1){ printf ("\nInput Error!");} else{ printf ("%d",length);} for (i=0;i<length;i++){ check=scanf("%c",&letter); if (check!=1 || letter<'A' || letter>'z' || (letter>'Z' && letter<'a')) printf ("Input Error!"); else printf ("%c",letter); if (letter>='A' && letter<='Z'){ for (check_letter='A',coded_letter='Z';check_letter<='Z'{ if (letter==check_letter) printf ("\n%c ",coded_letter); check_letter++; coded_letter--;}} if (letter>='a' && letter<='z'){ for (check_letter='a',coded_letter='z';check_letter<='z'{ if (letter==check_letter) printf ("\n%c ",coded_letter); check_letter++; coded_letter--;}}} printf ("is an encoded word."); return 0;}
פורסם 2005 במאי 220 שנים למה לא לעשות במקום:for (check_letter='A',coded_letter='Z';check_letter<='Z'{ if (letter==check_letter)printf ("\n%c ",coded_letter);check_letter++;coded_letter--;את:printf ("\n%c ",'Z'-coded_letter);יותר יעיל נראה לי..כנל עבור האותיות הקטנות.
פורסם 2005 במאי 220 שנים מחבר או קיי, תודה. חוץ מזה, הבעיה שלי (שבגללה פתחתי את הדיון), שהתכנית אמורה להפוך מלה שלמה למקודדת ולא כל אות בנפרד, כמו שהיא עושה כרגע, ז"א הפלט צריך להיות בדיוק כמו בדוגמה - לקלוט מלה ומיד אחריה להדפיס פלט מקודד שלה.
פורסם 2005 במאי 220 שנים אם כך, אתה חייב להשתמש במערך...אם אתה רוצה לעבוד על האותיות רק אחרי שאתה קולטאת כל המילה, אין ברירה אלא להשתמש במערך...אחרת אתה קולט אות ואז אתה חייב לעבוד עליה, אחרת איןלך איפה לשמור אותה(אלא אם כן לא הבנתי את הבעיה שלך... שזה גם יכול להיות)או לעשות את הדבר המטומטם, שזה כמו עכשיו, לקלוט אות ולעבודעליה ואז את האות הבאה אבל כשאתה מדפיס את האות המקודדתלהדפיס אותו למיקום אחר במסך שאתה מצייןחוץ מזה, לא הבנתי למה אתה מסתבך כ"כ בתוכניתאמנם לא טרחתי לקרוא אותה לעומק, אבל בתוכנית כזאת אין צורך ביותר מלולאה אחת,שהיא הזאת שאחראית לקלוט X אותיות (X=המספר שמכניסים לך בהתחלה)חוץ מזה אין שום צורך בלולאהאני עכשיו חייב לעזוב את המחשב הזה, אבל אני אערוך עוד מעט ואכתוב את התוכנית כפישאני הייתי כותב אותה (יכול להיות שיהיו לי מספר טעויות קטנות, שכן אני חלוד מאוד, אבל העקרון יהיה נכון)טוב כתבתי את התוכנית, עכשיו אני לא בטוח איך אם יש לי תו (char) אני לוקח את ערך האסקי (ASCII)שלו, אז כתבתי את זה בתור 'x', למרות שאני לא בטוח שזה נכוןבכל מקרה, הנה התוכנית:#include <conio.h>#include <stdio.h>#include <string.h>int check_inp(char arr[],int i);void main(){ int num,i; char arr[20]; printf("bla bla bla:"); scanf("%d",&num); scanf("%s",arr); if (check_inp(arr,num)==0) return 0; for (i=0;i<num;i++){ if (arr[i]>='A' && arr[i]<='Z'){ arr[i]='Z'+'A'-'arr[i]'; } else{ arr[i]='z'+'a'-'arr[i]'; } } printf("%s",arr);}int check_inp(char arr[],int i){ int count; for(count=0;count<i;count++){ if(!((arr[count]>='a' && arr[count]<='z') || (arr[count]>='A' && arr[count]<='Z'))){ return 0; } } return 1;}
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.