![]() |
# 1 |
חבר בקהילה
|
עזרה ב-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 ![]() |
![]() |
![]() |
# 2 |
הוסטסניון
|
יש לי רעיון, אני לא יודע עד כמה הוא יעיל אבל גם רעיון.
תבצע לולאה שתעבור על כל המטריצה ותבדוק אם האות הנוכחית(i) שווה לאות הראשונה במילה המבוקשת, אם שווה תמשיך לבדוק מכל צד(למעלה, למטה , ימין ושמאל) אם האות הבאה שווה לאות השנייה של המילה המבוקשת, אם כן תמשיך רקורסיבית(יש לדאוג לבדיקה של מספר אותיות). אם לא שווה להמשיך לרוץ על הלולאה.
__________________
"חינוך למדעי המחשב לא יכול להפוך אף אחד למתכנת מומחה יותר מאשר לימוד על מברשות וצבעים יכול להפוך מישהו לצייר מיומן." |
![]() |
![]() |
# 3 | |
חבר בקהילה
|
ציטוט:
ואם הבנתי נכון אז זה נראה לי קצת בעיה לבדוק מילה כי אם אני יקיש מחרוזת אז זה לא יסתדר ולפי מה שאני יודע אי אפשר להשוות מחרוזות בC |
|
![]() |
![]() |
# 4 | |
הוסטסניון
|
ציטוט:
אני לא בטוח איך זה בC אבל בוא אני אתן דוגמא. קוד:
str = "test"; print str[0]; // will print t print str[2]; // will print 2
__________________
"חינוך למדעי המחשב לא יכול להפוך אף אחד למתכנת מומחה יותר מאשר לימוד על מברשות וצבעים יכול להפוך מישהו לצייר מיומן." |
|
![]() |
![]() |
# 5 |
חבר בקהילה
|
רוץ פעם על השורות ופעם על העמודות ותחפש...לא כזה קשה..
יש אלכסונים גם? אם לא אז זה יחסית פשוט.. |
![]() |
![]() |
# 6 |
חבר בקהילה
|
|
![]() |
![]() |
# 7 |
חבר בקהילה
|
אחריי שתסיים יש לי קוד בשבילך, נשווה.
ובנתיים: איך רצים לפי שורות: קוד:
int i, j; for (i = 0; i < MATRIX_SIZE; i++) { for(j = 0; j < MATRIX_SIZE; j++) printf("%c\t", matrix[i][j]); printf("\n"); } בשביל ללכת לפי עמודות, אתה צריך: matrix[j][i] להחליף את האינדקסים, שים לב שאתה לא חורג מגבולות מערך אם יש לך מטריצה לא ריבועית. |
![]() |
![]() |
# 8 | |
חבר בקהילה
|
ציטוט:
מה שעשיתי היה: קוד:
for(i = 0; i < 5; i++) { printf("%c ", a[0][i]); } printf("\n"); for(i = 0; i < 5; i++) { printf("%c ", a[1][i]); } printf("\n"); for(i = 0; i < 5; i++) { printf("%c ", a[2][i]); } printf("\n"); for(i = 0; i < 5; i++) { printf("%c ", a[3][i]); } printf("\n"); for(i = 0; i < 5; i++) { printf("%c ", a[4][i]); } printf("\n\n"); יש לי עוד בעיה ביינתים עשיתי את הקוד הזה: קוד:
#include <stdio.h> #define ROW 4 #define COL 4 #define MATRIX_SIZE 5 int main () { char a[ROW][COL]; int i, j; char forCheck[4]; for(i = 0; i < 5; i++) { printf("row %d: ", i + 1); scanf("%s", a[i]); } for (i = 0; i < MATRIX_SIZE; i++) { for(j = 0; j < MATRIX_SIZE; j++) { printf("%c ", a[i][j]); } printf("\n"); } } Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted. איך אפשר לסדר את זה? עריכה שוב: שוב אני מנסה עכשיו לעשות את הבדיקה אבל אני פשוט לא יודע איך להתחיל חשבתי אולי לעשות בדיקה על כל אות ז"א a[0], a[1], a[2], a[3], a[4] אבל זה יהיה מטורף אני יצתרך איזה 200 לולאות FOR נראה לי מה אתם אומרים יש דרך יותר קצרה אולי? Last edited by Xinxy; 05-11-08 at 23:25.. |
|
![]() |
![]() |
# 10 |
חבר בקהילה
|
אופס נכון, טיפש אני :\
עריכה: הצלחתי להגיע לדבר כזה: קוד:
C:\C>matrix.exe row 1: aaaaaaaaaa row 2: zzzzzzzz row 3: xxxxxxxxx row 4: cccccccc row 5: vvvvvvvv a a a a a z z z z z x x x x x c c c c c v v v v v your word:az az appears 10 times זה הקוד שעשיתי: קוד:
for(i = 0; i < MATRIX_SIZE; i++) { for(j = 0; j < MATRIX_SIZE; j++) { for(z = 0; z < howmany + 1; z++) { if(forCheck[z] == a[i][j]) { ok++; } } } } Last edited by Xinxy; 06-11-08 at 00:05.. |
![]() |
![]() |
חברים פעילים הצופים באשכול זה: 1 (0 חברים ו- 1 אורחים) | |
|
|