![]() |
עזרה ב-C - מטריצה
שלום,
אני צריך לעשות מטריצת אותיות 5X5 שזה יהיה בעצם תפזורת וצריך לחשב בה את מספר המופעים של מילה מסויימת בתפזורת, המופע הזה יכול להיות מלמעלה, מלמטה, ימין, שמאל לדוגמא: A B A G I C A M P U M B O Y R Z A O Z U U R U B C נגיד זה יבקש ממני את השורה הראשונה אז יהיה רשום ABAGI בשורה השניה: CAMPU שלישית: MBOYR רביעית: ZAOZU חמישית: URUBC ואז אם נגיד אני ירשום שזה יחפש כמה פעמים המילה URU או ABA מופיעה זה יגיד לי שתיים אני עכשיו ישבתי על זה דיי הרבה זמן ופשוט לא עולה לי רעיון כיצד לבצע זאת HELP ME :-/ |
יש לי רעיון, אני לא יודע עד כמה הוא יעיל אבל גם רעיון.
תבצע לולאה שתעבור על כל המטריצה ותבדוק אם האות הנוכחית(i) שווה לאות הראשונה במילה המבוקשת, אם שווה תמשיך לבדוק מכל צד(למעלה, למטה , ימין ושמאל) אם האות הבאה שווה לאות השנייה של המילה המבוקשת, אם כן תמשיך רקורסיבית(יש לדאוג לבדיקה של מספר אותיות). אם לא שווה להמשיך לרוץ על הלולאה. |
ציטוט:
ואם הבנתי נכון אז זה נראה לי קצת בעיה לבדוק מילה כי אם אני יקיש מחרוזת אז זה לא יסתדר ולפי מה שאני יודע אי אפשר להשוות מחרוזות בC |
ציטוט:
אני לא בטוח איך זה בC אבל בוא אני אתן דוגמא. קוד:
str = "test"; |
רוץ פעם על השורות ופעם על העמודות ותחפש...לא כזה קשה..
יש אלכסונים גם? אם לא אז זה יחסית פשוט.. |
ציטוט:
ואיך לרוץ על העמודות? |
אחריי שתסיים יש לי קוד בשבילך, נשווה.
ובנתיים: איך רצים לפי שורות: קוד:
int i, j; בשביל ללכת לפי עמודות, אתה צריך: matrix[j][i] להחליף את האינדקסים, שים לב שאתה לא חורג מגבולות מערך אם יש לך מטריצה לא ריבועית. |
ציטוט:
מה שעשיתי היה: קוד:
for(i = 0; i < 5; i++) יש לי עוד בעיה ביינתים עשיתי את הקוד הזה: קוד:
#include <stdio.h> Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted. איך אפשר לסדר את זה? עריכה שוב: שוב אני מנסה עכשיו לעשות את הבדיקה אבל אני פשוט לא יודע איך להתחיל חשבתי אולי לעשות בדיקה על כל אות ז"א a[0], a[1], a[2], a[3], a[4] אבל זה יהיה מטורף אני יצתרך איזה 200 לולאות FOR נראה לי מה אתם אומרים יש דרך יותר קצרה אולי? |
טעית בגדולים
char a[MATRIX_SIZE][MATRIX_SIZE] |
ציטוט:
עריכה: הצלחתי להגיע לדבר כזה: קוד:
C:\C>matrix.exe זה הקוד שעשיתי: קוד:
for(i = 0; i < MATRIX_SIZE; i++) |
לא ברור מכאן מה זה howmany.
ולמה הלולאה השלישית? אני יכול לתת לך את הפתרון, השאלה אם זה מה שיעזור לך. |
ציטוט:
והלולאה השלישית כדי לבדוק אם האות נמצאת - לא אני לא מצליח לחשוב על משהו אחר :\ |
לא אמרת שמכניסים מילה אחת?
|
ציטוט:
נראה לי שלא הסברתי טוב עשיתי את howmany כדי שאני ידע כמה אותיות יש בדיוק במילה ואז לעשות עליה לולאה שתבדוק עריכה: אופס התכוונתי בהודעה הקודמת לכמה אותיות |
אז אין צורך בפלוס אחד,
נניח ויש לך המילה ABA, str[0] = A str[1] = B str[2] = A סה"כ מילה בת 3 אותיות, כשהאינדקס האחרון הוא 2, אתה חורג שם מהגבול. ובכל מקרה, הלולאה הפנימית (זאת עם הZ) בודקת כמה פעמים מופיעה אות ספציפית מהמטריצה במחרוזת, מעבר לזה זה לא נותן לך כלום. אני מציע דבר כזה: שני לולאות שרצות על המטריצה. אינדקס שלישי שומר על האינדקס של המילה המבוקשת, ברגע שאתה מוצא שהאות הנוכחית במטריצה שווה לאות הרשונה במחרוזת תתחיל לקדם את האינדקס של המילה, אם אתה רואה שאין שווין לפני שאתה מגיע לסוף של המילה, אפס את האינדקס. אם הגעת לסוף המילה בהצלחה, אז יופי טופי, ספור אותה. אם לא היה ברור, הנה ההתחלה של הפונקציה לחיפוש מילה: קוד:
int searchMatrix(char **mat, int x, int y, char * what) |
ציטוט:
ואין הדבר הזה לא נקלט לי בשכל אני הבנתי איך למצוא את המילה הראשונה אבל אחרי שמצאתי - מה אני אמור לעשות? עוד לולאה אני לא חושב שתעזור לי אמ.. ואני חושב שהלולאה השלישית היא דווקא עוזרת לי כי רק באמצעותה אפשר למצוא את המילים שיש מילה שהמשתמש רשם אהה ולא השתמשתי בstrlen בגלל שלא למדנו ואנחנו יכולים להשתמש רק בפונקציות שלמדנו וד"א אני מודה לך על העזרה אני מעריך את זה מאוד |
אז תכתוב strlen משלך =)
קוד:
int strlen( char* st) VS לא זורק שגיאה, זה עוד לא אומר שזה נכון. |
ציטוט:
וד"א זה לא קשור לVS הנה זה מה שעשיתי קוד:
for(i = 0; i < 6; i++) (אני לא יכול להשתמש גם בגדול ושווה כי לא למדנו) |
אתה לומד בתיכון?
מה ז"א לא יכול להשתמש כי לא למדתם? למה אני לא יכול לפתור בעיה במטמטיקה עם אינטגרל כי לא למדנו? גדול שווה זה כבר מוגזם, strlen אני מבין, סבבה, אבל גדול שווה? |
ואין מצב שלמדתם מטריצות ואתם לא יודעים גדול שווה....כעיקרון גם במתמטיקה, כן אסור להשתמש במשו שלא למדת..
לא למדת דמיון , תפתור בלי דמיון |
ציטוט:
ועדיין אני צריך את עזרתכם בקשר לבדיקה |: |
בזמני הפרטי היום בערב אני אכנס ואפתור לך את התרגיל..
כעיקרון אתה פעם אחת רץ מעמודה לעמודה לעמודה ופעם אחת רץ משורה לשורה לשורה וככה בודק האם המילה שאתה מחפש מופיע ככה או ככה.. |
אוף אני כבר מיואש :\
הנה הדבר שניסיתי אבל גם הוא לא הצליח! PHP קוד:
|
הנה הפתרון שלי, מחפש רק משמאל-לימין ומלמעלה למטה.
מתקפל יופי ב: קוד:
gcc version 4.2.1 20070719 [FreeBSD] הקוד כאן |
כל הזמנים הם GMT +2. הזמן כעת הוא 00:23. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ