עבור לתוכן
  • צור חשבון
  • מי אנחנו?

    שלום אורח/ת!

     
    שים לב - על מנת להשתתף בקהילה שלנו, להגיב ולפתוח דיונים חדשים, עליך להצטרף כחבר רשום.

    החברים שלנו נהנים מיתרונות רבים, כולל היכולת להשתתף בדיונים, להנות מהגרלות ומבצעים לחברי האתר, ולקבל מידי שבוע את התכנים הבולטים שלנו ישירות במייל.

    לא אוהבים שמציקים לכם במייל? ניתן להירשם לאתר אך לוותר על הרישום לעידכוני המייל השבועיים.

99_tal

רקורסיה במערך דו מימדי בשפת c

Recommended Posts

היי,

יש לי שאלה כזו- נתונה לי מטריצה מסוג char בגודל 4X4. נתונה לי גם פונקציה ( bool isWord(char* s ובה יש את כול המילים שניתן ליצור מהתווים שבמטריצה.

אני צריכה לעבור על המטריצה ובכול פעם לשלוח לפונקציה מילה אפשרית, אם זו אכן מילה אז להדפיס אותה ולבסוף להחזיר את מספר המילים התקינות שהדפסתי.

ישנה מגבלה- אסור לעבור על המטריצה כאשר חוצים את הקו הדימיוני בעת המעבר עליה (מותר ללכת ימינה, שמאלה, למעלה, למטה אבל אסור לחצות את הקו הדימיוני)

 

ניסיתי קודם כול לכתוב את הפונקציה ללא המגבלה- בעזרת רקורסיה. משום מה אני לא מצליחה לבצע זאת.(מקבלת הודעות שגיאה לא מובנות) אני ממש אשמח לעזרה 

יש לציין שרק עכשיו התחלתי ללמוד את השפה ואני עוד לא בקיאה כ"כ....

מצרפת את הקוד...


#include <stdio.h>
#include <stdbool.h>

int main()
{
   char matrix [4][4]={{'C','A','R','T'},{'E','T','A','K'},{'E','S','M','E'},{'L','L','P','N'}};
   printf("%d",printWords(matrix));

    return 0;
}

#define MATRIX_SIZE 4
 int printWords(char A[MATRIX_SIZE][MATRIX_SIZE]){
	 int row,col=0;
	 int counter=0;
	 if(row>MATRIX_SIZE || col>MATRIX_SIZE|| row<0 || col<0){
	  return 0;
	 }
	 if(isWord(printWords*(A[row][col+1]))){
	     printf("%c",(printWords(A[row][col+1])));
	     counter++;
	 }
	   if(isWord(printWords*(A[row+1][col]))){
	     printf("%c",(printWords(A[row+1][col])));
	     counter++;
	   }
	    if(isWord(printWords*(A[row-1][col]))){
	     printf("%c",(printWords(A[row-1][col])));
	     counter++;
	        
	    }
	     if(isWord(printWords*(A[row][col-1]))){
	     printf("%c",(printWords(A[row-1][col])));
	     counter++;
	         
	     }
	     return counter;
 }

bool isWord(char* s){

		return (!strcmp(s,"CAT") |
			!strcmp(s,"CATS") |
			!strcmp(s,"TRAM") |
			!strcmp(s,"TRAMS") |
			!strcmp(s,"TAME") |
			!strcmp(s,"CAR") |
			!strcmp(s,"CARS") |
			!strcmp(s,"RAT") |
			!strcmp(s,"RATS") |
			!strcmp(s,"RAMP") |
			!strcmp(s,"ART") |
			!strcmp(s,"CART") |
			!strcmp(s,"STAMP") |
			!strcmp(s,"TAKEN") |
			!strcmp(s,"MEN") |
			!strcmp(s,"MAKE") |
			!strcmp(s,"TAKE") |
			!strcmp(s,"ATE") |
			!strcmp(s,"SELL") |
			!strcmp(s,"STEEL") |
			!strcmp(s,"RAKE") );

}


 

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

א. הניסוח של השאלה לא ברור. מה זה אומר "לעבור על המטריצה"? מה זה "הקו הדמיוני"?

ב. את אומרת שאת מקבלת הודעות שגיאה לא מובנות, אבל לא מציינת מה הן. אז איך אנחנו אמורים לדעת?

ג. את משתמשת בפונקציה strcmp שמשווה בין שתי מחרוזות, אבל זו פונקציה שחייבת לקבל מחרוזות שמסתיימות בתו '0\' (כשאת מגדירה מחרוזת בצורה כזו: char* s = "hello" אז הקומפיילר מוסיף את התו הזה באופן אוטומטי). במקרה שלך המטריצה מורכבת מתווים בודדים בלי '0\' בסוף - אם תנסי לבצע עליהן strcmp אז הפעולה תיכשל (למעשה היא תעשה כל מיני דברים לא צפויים).

ד. בתחילת הפונקציה את מגדירה row = col = 0 ואז בודקת אם הם גדולים מ-MATRIX_SIZE, שמוגדר להיות קבוע 4. הבדיקה הזו חסרת משמעות, היא לעולם לא תהיה אמת.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

הצטרפ/י לדיון

בשלב זה תוכל/י להצטרף לדיון, ולאחר מכן להצטרף לקהילה שלנו. אם כבר יש לך חשבון אצלנו, אנא התחבר/י עכשיו על מנת להגיב תחת שם המשתמש שלך.
לתשומת לבך: התגובה תופיע לגולשים לאחר אישור של צוות הנהלת הפורומים.

אורח
הוסף תגובה

×   התוכן שהודבק הוא עם עיצוב.   הסר עיצוב

  Only 75 emoji are allowed.

×   הקישור שלך הוטמע אוטומטית.   הצג כקישור רגיל

×   התוכן הקודם שלך שוחזר אוטומטית.   נקה הכל

×   You cannot paste images directly. Upload or insert images from URL.


×
  • צור חדש...
Back to top button
Close