פורסם 2010 במאי 1315 שנים בוקר אוראני רוצה לכתוב קוד שמקבל שני מערכים חד מימדיים שמכילים 7 אותיות אנגליות קטנות, כשהקוד בודק את התמורה של שני המערכים - אם המערך הראשון מכיל בדיוק אותם איברים של המערך השני (כולל ריבוי).לדוגמא:array1=[a,b,c,a,b,c] zzarray2=[a,a,b,b,c,c] zzאז המערך הראשון הוא תמורה של השני כי מופיעים בשניהם אותם איברים עם אותו ריבוי.אם למשלarray1=[a,b,c,a,c] zzarray2=[a,a,b,c,c,b] zzאז המערך הראשון אינו תמורה של השני כי בראשון b מופיע פעם אחת ובשני פעמייםהמטרה היא להדפיס בסוף אם המערך הראשון הוא תמורה של השני או לאבהנחה שכבר הכנסתי למערכים את האיברים שלהם והם כולם אותיות אנגליות קטנות, מה האלגוריתם להשוואה בין המערכים?
פורסם 2010 במאי 1315 שנים שתי דרכים:א. לעבור על על האיברים באחד מהמערכים, ולספור את מספר המופעים של כל איבר בשני המערכים ולהשוות (חוץ מזה כדאי לוודא קודם ששני המערכים בכלל באותו גודל). זה לא אופטימלי (יש הרבה כפילות), אבל זה קל למימוש.ב. למיין את שני המערכים, ואז להשוות איבר-איבר. אם המערכים מכילים רק תווים באנגלית אז אפשר אפילו להוסיף להם '0\' בסוף ולהשוות אותם כמחרוזות באמצעות strcmp.
פורסם 2010 במאי 1315 שנים מחבר אני לא מכיר את הפונקציה strcmp, אתה יכול לפרט קצת על הדרך הראשונה? כי חשבתי על הדרך הזאת (נתון שהמערכים באותו גודל) אבל לא ידעתי בדיוק איך לממש את זה.. כלומר אני עובר על המערך הראשון לוקח את האיבר הראשון ומשווה לכל שאר האיברים באותו מערך ויוצר מן קאוטנר שיספור את החזרות אז יהיו לי 7 קאונטרים למערך הראשון אבל כפילות יהיה דבר נפוץ כלומר אם יהיו לי 3 איברים שכולם האות a אז יש לי כאן שלושה קאונטרים מיותרים שאני לא יודע איך להתעלם מהם ולהתייחס רק לאחד. גם את ההשוואה לקאונטרים של המערך השני אני לא כל כך מבין איך לעשות
פורסם 2010 במאי 1315 שנים אז עזוב את strcmp, לא צריך אותה. אתה יכול פשוט למיין את המערכים ואז להשוות אותם איבר-איבר (זה כמובן בהנחה שמותר לך למיין אותם).לגבי הפתרון הראשון - בדיוק, בגלל זה אמרתי שזה לא יעיל. הפתרון שהצעתי לא שומר קאונטרים לכל איבר במערך, אלא לכל איבר במערך הוא בודק (באמצעות ספירה פשוטה) אם מספר המופעים שלו במערך הראשון שווה למספר המופעים שלו במערך השני. כן, זה לא יעיל, כי אם אותה אות מופיעה במערך 3 פעמים אז אתה תבדוק אותה 3 פעמים ולא רק פעם אחת, אבל זה אלגוריתם פשוט והוא עושה את העבודה.
פורסם 2010 במאי 1315 שנים מחבר זהו שבאיזשהו שלב נתקעתי בו הבנתי איך עוברים על כל מערך וסופרים כמו פעמים כל אות מופיעה (לולאה בתוך לולאה), אבל נתקעתי בחלק של להשוות בין שני המערכים כי צריך גם להשוות בין האיברים עד שיש התאמה ואז גם להשוות בין הקאונטרים לא הצלחתי לישם את זה
פורסם 2010 במאי 1315 שנים שוב, לא הבנת מה אני רוצה שתעשה.תחשוב על זה ככה: קודם כל, תכתוב פונקציה שבודקת את מספר המופעים של 'a' בשני המערכים שווים, ואחר כך תמשיך משם.
פורסם 2010 במאי 1415 שנים מחבר printf("please enter 7 non-capital english letters of the first array:\n");scanf("%c %c %c %c %c %c %c",&arr_1[0],&arr_1[1],&arr_1[2],&arr_1[3],&arr_1[4],&arr_1[5],&arr_1[6]); for (i=0; i<N; i++){ if ((arr_1[i]<97) || (arr_1[i]>122)){ printf("Illegal Character");} }printf("please enter 7 non-capital english letters of the second array:\n");scanf("%c %c %c %c %c %c %c",&arr_2[0],&arr_2[1],&arr_2[2],&arr_2[3],&arr_2[4],&arr_2[5],&arr_2[6]); for (i=0; i<N; i++){ if ((arr_2[i]<97) || (arr_2[i]>122)){ printf("Illegal Character");} }for (i=0; i<N; i++){ counter_1[i]=0; counter_2[i]=0;}for (i=0; i<N; i++){ for (j=i; j<N; j++){ if (arr_1[i]==arr_1[j]){ counter_1[i]++;} } }for (i=0; i<N; i++){ for (j=i; j<N; j++){ if (arr_2[i]==arr_2[j]){ counter_1[i]++;} } } יש לי 2 בעיות:1 - זה כל הזמן כותב לי שהכנסתי אותיות לא חוקיות למערך השני, אבל אם אני מבודד אותו מהראשון הוא לא כותב דבר2 - אני לא יודע לאן להמשיך מכאן (מה שאמרתי מקודם הוא שעד כאן הבנתי)
פורסם 2010 במאי 1415 שנים לגבי הקריאה לתוך המערכים, זה כנראה נובע מאופן הקריאה שלך. איזה קלט אתה מכניס (בדיוק)? למה אתה לא משתמש פשוט בלולאה?ולגבי הבדיקה עצמה, אתה מתעלם ממה שאני אומר:קודם כל' date=' תכתוב פונקציה שבודקת את מספר המופעים של 'a' בשני המערכים שווים, ואחר כך תמשיך משם.[/quote']
פורסם 2010 במאי 1515 שנים מחבר אתה צודק, באמת לא הבנתי נכון את מה שכתבת ותיקנתי עכשיו אבל קודם כל זה ממש מעצבן אותי הקטע עם הקלט.. אני צריך לקלוט אותם בצורה כזאת: לכן לולאה לא תתאים זה אמור לעבוד ואני לא מבין למה זה כותב שגיאה בקליטת אותיות של החלק השני..
פורסם 2010 במאי 1515 שנים למה שלולאה לא תתאים?בכל מקרה, הבעיה היא שכנראה הוא קולט את אחד הרווחים או ירידות השורה בטעות. תדפיס את הקלט אחרי שאתה קורא אותו כדי לבדוק איפה הוא נכשל.
פורסם 2010 במאי 1515 שנים מחבר כן זה סוג של הכניס רווח לאיבר הראשון של המערך השני אז הגדרתי סתם משתנה מסוג CHAR שיקלוט את הרווח הזה ישר אחרי המערך הראשון (יש גם איזו פקודה שמנקה את הבאפר או משהו כזה, לא?) בכל מקרה, הצליח. תודה אני בטח אחזור בקרוב עם השאלה הבאה שהיא יותר מסובכת, משהו עם מערכים דו-מימדיים ויותר מדי דרישות שבת שלום!
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.