שאלה בפונקציות בC++ - עמוד 3 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה בפונקציות בC++


BAR_PC
 Share

Recommended Posts

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

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

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

ציטוט של etal

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

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

 

אתה מתכוון לקוד האחרון שכתבתי? אני אנסה את זה תודה :)

אבל למה הוא לא עונה על השאלה? עובדה שבחלק מהדוגמאות זה עובד.

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

 

ציטוט

עובדה שבחלק מהדוגמאות זה עובד

זה על תקן שגם שעון מקולקל מדייק פעמיים ביום.

 

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

ציטוט של af db creid

לא מספיק לבדוק לפי הסדר אם השני מתחלק בראשון והשלישי בשני. זה לא ימצא את כל התבניות לדוג' במקרה שלך -

15 לא מחלק את 20, אז הלולאה של divide_left מפסיקה. למרבה הצער, זה ש15 לא מחלק את 20 לא אומר שהוא לא מחלק את 30.

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

 

נערך על-ידי etal
קישור לתוכן
שתף באתרים אחרים

ציטוט של etal

 

זה על תקן שגם שעון מקולקל מדייק פעמיים ביום.

 

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

 

אני משנה כל פעם את התא עם j מעלה כל פעם ב1 או מוריד באחד לפי הצורך (ימין שמאל) כדי לבדוק אם התא מתחלק בכל התאים...או שבראש שלי חושב אחרת כאילו ניסיתי לקצר את זה בלולאה שאם התא מתחלק משמאלו אז עם j זה יבדוק את התא אחריו וכך הלאה או שמחשבות לחוד וקוד לחוד הבנת את הכוונה שלי?... תודה

נערך על-ידי BAR_PC
קישור לתוכן
שתף באתרים אחרים

ציטוט של BAR_PC

אני משנה כל פעם את התא עם j מעלה כל פעם ב1 או מוריד באחד לפי הצורך (ימין שמאל) כדי לבדוק אם התא מתחלק בכל התאים...או שבראש שלי חושב אחרת כאילו ניסיתי לקצר את זה בלולאה שאם התא מתחלק משמאלו אז עם j זה יבדוק את התא אחריו וכך הלאה או שמחשבות לחוד וקוד לחוד הבנת את הכוונה שלי?... תודה

הבנתי, וכמו שכתבתי זה לא עובד, וגם הסברתי למה ונתתי דוגמה.

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

ציטוט של af db creid

הבנתי, וכמו שכתבתי זה לא עובד, וגם הסברתי למה ונתתי דוגמה.

 

זה מה שצריך לעשות?

כי גם פה ניראלי שיש בעיה...

//------include section-------
#include <iostream>
#include <cstdlib>

//------std section-------
using std:: cin;
using std:: cout;
using std:: endl;

//------const section
const int N = 6; // The size you want to set

//---prtotypes section----
void read_data (int arr[]);
int divide_left(int arr[], int cell);
int divide_right (int arr[], int cell);
int happend(int arr[], int cell);

/////-----Main-------
int main()
{
    int arr[N];

    read_data(arr);

    int cell;

    int found =  happend(arr,cell);

    cout << found;

   return EXIT_SUCCESS ;
}

void read_data(int arr[])
{
	for(int i = 0; i < N; i++)
		cin >> arr[i];
}

int divide_left(int arr[], int cell)
{
	int findleft = 1;

	for(int i = 0; i < N; i++)
	{
		for(int j = i; j < N; j++)
		{
			if (arr[j] % arr[i] != 0)
			{
				findleft = 0;
				break;
			}
			findleft = 1;
			cell = j;
		}
	}

	return findleft;

}

int divide_right (int arr[], int cell)
{
	int findright = 1;

	for (int i = 0; i < N; i++)
	{
		for (int j =  0; j < N; j++)
		{
			if(arr[i] % arr[j] != 0)
			{
				findright = 0;
				break;
			}
			findright = 1;
			cell = i;
		}
	}

	return findright;

}

int happend(int arr[], int cell)
{
	int i = divide_right (arr, cell);

	int j = divide_right (arr,cell);

	if(i == 1 && j == 1)
	{
		for(int i = 0; i < N; i++)
		{
			 divide_right (arr,cell);
             return cell;
		}
	}

	return -1;

}

 

תודה :)

נערך על-ידי BAR_PC
קישור לתוכן
שתף באתרים אחרים

עכשיו הקוד שלך לא קורא ל-divide_left בכלל

 

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

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

 

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

ציטוט של etal

עכשיו הקוד שלך לא קורא ל-divide_left בכלל

 

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

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

 

טעות של העתקה חח תיקנתי את int i ל divide_left.

איפה היית ממקם את הלולאות? ככה זה עובר על כל התאים,לא?

בעיקרון שכחתי לעדכן (מצטער מראש) שהוראת התרגיל זה לעשות 3 פונקציות אחת שתבדוק מימין אחת משמאל והשלישית בודקת אם שניהן מתקיימות ומחזירה את מס התא או -1. אז אני לא רואה דרך אחרת חוץ מזאת שתבדוק לי מכל צד ואם  שתיהן מתקיימות אז... יש אפשרות אחרת על פי ההוראות?

 

תודה :)

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

האם בהוראות הגדירו לך בדיוק את הקלט והפלט של כל הפונקציות?

די ברור שלא הבנת נכון את הכוונה של cell והדרך שאתה משתמש בו כרגע חסרת משמעות. תשנה את הפונקציות divide_right ו-divide_left ככה שיבדקו רק האם אותו מספר תא ספציפי מקיים את התנאי או שלא ומחזירות תשובה בהתאם. ברגע שתעשה את זה אני רוצה להאמין שההמשך יהיה לך ברור.

נערך על-ידי etal
קישור לתוכן
שתף באתרים אחרים

ציטוט של etal

האם בהוראות הגדירו לך בדיוק את הקלט והפלט של כל הפונקציות?

די ברור שלא הבנת נכון את הכוונה של cell והדרך שאתה משתמש בו כרגע חסרת משמעות. תשנה את הפונקציות divide_right ו-divide_left ככה שיבדקו רק האם אותו מספר תא ספציפי מקיים את התנאי או שלא ומחזירות תשובה בהתאם. ברגע שתעשה את זה אני רוצה להאמין שההמשך יהיה לך ברור.

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

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

ציטוט של BAR_PC

אני רוצה לשמור את הcell בשביל לבדוק בפונקציה ולהחזיר את מספר התא אם צריך

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

 

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

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

תיקנתי את הקוד. זה בסדר?

//------include section-------
#include <iostream>
#include <cstdlib>

//------std section-------
using std:: cin;
using std:: cout;
using std:: endl;

//------const section
const int N = 6; // The size you want to set

//---prtotypes section----
void read_data (int arr[]);
bool divide_left(int arr[], int cell);
bool divide_right (int arr[], int cell);
int search_for_the_magic_cell(int arr[]);

/////-----Main-------
int main()
{
    int arr[N];// = { 180, 120, 60, 30, 20, 15 };

    read_data(arr);

    int result = search_for_the_magic_cell(arr);
    
    if (result != -1) cout << "we got a match !! cell number is " << result << " and its value is " << arr[result];
    else cout <<  "no I didn't find anything";

   return EXIT_SUCCESS ;
}

void read_data(int arr[])
{
	for(int i = 0; i < N; i++)
		cin >> arr[i];
}

bool divide_left(int arr[], int cell)
{
	 for (int i = cell - 1; i >= 0; i--) if (arr[i] % arr[cell] != 0) return false;
	 return true;
}

bool divide_right(int arr[], int cell)
{
	 for (int i = cell + 1; i < N; i++) if (arr[cell] % arr[i] != 0) return false;
	 return true;
}

int search_for_the_magic_cell(int arr[]) {
    // so I we a loop to check if each element in the array is the magic cell
    
    for (int i = 0; i < N; i++) {
        bool l = divide_left(arr, i);
        bool r = divide_right(arr, i);
        
        if (l && r) return i;
    }

	return -1;
}
180
120
60
30
20
15
we got a match !! cell number is 2 and its value is 60 

 

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

ציטוט של Jabberwock

תיקנתי את הקוד. זה בסדר?


//------include section-------
#include <iostream>
#include <cstdlib>

//------std section-------
using std:: cin;
using std:: cout;
using std:: endl;

//------const section
const int N = 6; // The size you want to set

//---prtotypes section----
void read_data (int arr[]);
bool divide_left(int arr[], int cell);
bool divide_right (int arr[], int cell);
int search_for_the_magic_cell(int arr[]);

/////-----Main-------
int main()
{
    int arr[N];// = { 180, 120, 60, 30, 20, 15 };

    read_data(arr);

    int result = search_for_the_magic_cell(arr);
    
    if (result != -1) cout << "we got a match !! cell number is " << result << " and its value is " << arr[result];
    else cout <<  "no I didn't find anything";

   return EXIT_SUCCESS ;
}

void read_data(int arr[])
{
	for(int i = 0; i < N; i++)
		cin >> arr[i];
}

bool divide_left(int arr[], int cell)
{
	 for (int i = cell - 1; i >= 0; i--) if (arr[i] % arr[cell] != 0) return false;
	 return true;
}

bool divide_right(int arr[], int cell)
{
	 for (int i = cell + 1; i < N; i++) if (arr[cell] % arr[i] != 0) return false;
	 return true;
}

int search_for_the_magic_cell(int arr[]) {
    // so I we a loop to check if each element in the array is the magic cell
    
    for (int i = 0; i < N; i++) {
        bool l = divide_left(arr, i);
        bool r = divide_right(arr, i);
        
        if (l && r) return i;
    }

	return -1;
}

180
120
60
30
20
15
we got a match !! cell number is 2 and its value is 60 

 

כן תודה רבה ממש! מעריך :)

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

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

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

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

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

  Only 75 emoji are allowed.

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

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

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

 Share


×
  • צור חדש...