עבור לתוכן

אלגוריתם פשוט שלא עובד לי ב-с

Featured Replies

פורסם

האלגוריתם מקבל מערך דו ממדי בגודל 6 על 6 ובודק אם יש בו רביעייה k (זו רביעיה של מספרים שצמודים במערך בצורה של ריבוע לדוגמה יש מערך בגודל 6 על 6

אז האלגוריתם מחפש אם בתוך המערך יש תת מערך בגודל 2 על 2 שבו כל באיברים שווים).

הנה האלגוריתם:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

typedef int arr[6][6];

int chack(arr a)

{

int i,z,num;

for(i = 0; i < 6; i++)

{

for(z = 0; z < 6; z++)

{

if((a[z] == a[z+1])&&(a[z+1] == a[i+1][z])&&(a[i+1][z] == a[i+1][z+1]))

{ num = 1; }

else

{ num = 0; }

}

}

return num;

}

void main()

{

clrscr();

int i,z,numb;

arr mar;

printf("enter 36 numbers\n");

for(i = 0; i < 6; i++)

{

for(z = 0; z < 6; z++)

{ scanf("%d",&mar[z]); }

}

numb == chack(mar);

printf("\n%d",&numb);

}

פורסם

אתה צריך משהו כמו:


int array[6][6];

for (i = 1; i < 6; ++i)
for (j = 1; j < 6; ++j)
{
int x = array[i-1][j-1];
if ( (x == array[i-1][j]) && (x == array[i][j-1]) && (x == array[i][j]) )
return true;
}

(לא צריך לעבור על כל ה-36 איברים, אלא רק על 25)

פורסם
  • מחבר

זה בדיוק מה שאני רשמתי רק בצורה אחרת וזה לא עובד

זה דופק לי איזה מספר בפלט של 29,345 או משהו כזה יש מצב שזה המספר הכי גדול ב-int.

פורסם

הנה הבעיה שלך:

printf("\n%d",&numb);

ב-printf לא צריך לתת את ה-&, אלא אתה צריך לתת את המשתנה עצמו (בניגוד ל-scanf).

חוץ מזה יש לך עוד כמה בעיות:

1. אתה יוצא מגבולות המערך - אתה רץ מ-0 עד 5, ולכן כ-z==5 או i==5 אתה מנסה לבדוק תא שנמצא מחוץ למערך.

(במקרה של z=5 אתה לא בדיוק יוצא מהגבולות אלא פשוט גולש לשורה הבאה, אבל ב-i=5 אתה מגיע לשורה לא קיימת)

2. שים לב שכל פעם שאתה בודק ריבוע, אתה משנה את הערך של num. לכן, גם אם תמצא ריבוע מתאים, אז הבדיקה של הריבוע שאחריו תבטל את הבדיקה הקודמת.... מה שצריך לעשות הוא לאתחל מראש את num ב-0, ואז רק כשאתה מוצא ריבוע מתאים לעשות num=1 (ולא לעשות num=0 אם אתה לא מוצא). אפשרות נוספת היא לעשות מה ש-bla7 עשה.

פורסם
  • מחבר

תודה!

לגבי ה-& ב-printf פשוט לא שמתי לב....

חחחח..

ארכיון

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

דיונים חדשים