רקורסיה במערך דו מימדי בשפת c - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


99_tal

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. הבדיקה הזו חסרת משמעות, היא לעולם לא תהיה אמת.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...