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

    שלום אורח/ת!

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

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

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

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


BAR_PC

Recommended Posts

ציטוט של af db creid

רק רגע -

כלומר כל התאים במערך מתחלקים בו?

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

נערך על-ידי BAR_PC
קישור ישיר להודעה
שתף באתרים אחרים
  • תגובות 42
  • נפתח בתאריך
  • תגובה אחרונה

משתתפים בולטים בדיון

משתתפים בולטים בדיון

תגובות פופולריות

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

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

תיקנתי את הקוד. זה בסדר? //------include section------- #include <iostream> #include <cstdlib> //------std section------- using std:: cin; using std:: cout; using std:: endl; //-----

טוב.

שתי בעיות -

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

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

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

שנית, בעיה שלא מופיעה בדוגמה שלך אבל בכל זאת קיימת -

התוכנית לא עובדת אם יש שני מספרים שעומדים בקריטריון (אמרת שהיא אמורה להדפיס את הראשון). נסה את הרצף 1 2 4 8 16 32 וזה אמור להדפיס -1. אשאיר לך את זה כתרגיל. אם תצטרך עדיין עזרה אני כאן.

קישור ישיר להודעה
שתף באתרים אחרים
ציטוט של af db creid

טוב.

שתי בעיות -

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

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

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

שנית, בעיה שלא מופיעה בדוגמה שלך אבל בכל זאת קיימת -

התוכנית לא עובדת אם יש שני מספרים שעומדים בקריטריון (אמרת שהיא אמורה להדפיס את הראשון). נסה את הרצף 1 2 4 8 16 32 וזה אמור להדפיס -1. אשאיר לך את זה כתרגיל. אם תצטרך עדיין עזרה אני כאן.

זה אומר לעשות לולאת פור לכל תא פשוט? או משהו אחר?

לגבי השני לא הבנתי..

 

תודה :)

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

הממ,

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

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

דבר שני, אין שום שימוש במשתנים divide_l וdivide_r (לא אלו של happend).

קישור ישיר להודעה
שתף באתרים אחרים
ציטוט של af db creid

הממ,

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

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

דבר שני, אין שום שימוש במשתנים divide_l וdivide_r (לא אלו של happend).

אין בהם צורך פשוט? 

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

אין בהם צורך פשוט? 

תסתכל, אתה לא משתמש בהם.

 

ציטוט של BAR_PC

כל הבדיקה של כל תא יהיה בפונקצייה אחת?

אפשר, או לחלק את זה לפונקציה נפרדת.

נערך על-ידי af db creid
קישור ישיר להודעה
שתף באתרים אחרים
ציטוט של af db creid

תסתכל, אתה לא משתמש בהם.

 

אפשר, או לחלק את זה לפונקציה נפרדת.

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

פה השתמשתי בהם הבנת מה עשיתי? כאילו שמרתי כל פעם על התא שיבדוק את הבאים ואם לא אז שיעבור לתא הבא זה עדיין מדפיס לי -1...

//------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 &cell1, int &cell2);

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

    read_data(arr);

    int cell1,cell2;

    int found = happend(arr,cell1,cell2);

    if(found != -1)
    	cout<< cell1;
    else
    	cout << "-1";

   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 divide_l = arr[N];

	int j = N -1;

	for(int i = N -1 ; i >= 0; i--)
	{
		if((arr[j] % arr[i-1]) == 0)
		{
			divide_l = i;
			cell = divide_l;
		}
		j--;
	}

	return cell;

}

int divide_right (int arr[], int &cell)
{
	int divide_r = arr[0];

	int j = 0;

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

	return cell;

}

int happend(int arr[], int &cell1, int &cell2)
{
	int no = -1;

	int divide_l = divide_left(arr,cell1);

	int divide_r = divide_right (arr,cell2);

	if(divide_l == divide_r)
	    return divide_l;
	else
		return no;
}


 

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

היי חבר'ה שיגעתי אותכם ממש אבל מרגיש בודד בנושא ואין לי למי לפנות...

אם אני משנה את התנאים כאן:

if(found != -1)
    	cout<< cell1;
    else
    	cout << "-1";

לככה:

if(found != -1)
    	 cout << "-1";
    else
    	cout<< cell1;

אז בדוגמה 180 120 60 30 20 15 הפלט 3 שזה תקין אבל שאין אז הוא לא מוציא -1 מישהו בבקשה יכול להסביר לי מדוע?

 

המון תודה ושוב סליחה :)

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

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

פה השתמשתי בהם הבנת מה עשיתי? כאילו שמרתי כל פעם על התא שיבדוק את הבאים ואם לא אז שיעבור לתא הבא זה עדיין מדפיס לי -1...


//------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 &cell1, int &cell2);

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

    read_data(arr);

    int cell1,cell2;

    int found = happend(arr,cell1,cell2);

    if(found != -1)
    	cout<< cell1;
    else
    	cout << "-1";

   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 divide_l = arr[N];

	int j = N -1;

	for(int i = N -1 ; i >= 0; i--)
	{
		if((arr[j] % arr[i-1]) == 0)
		{
			divide_l = i;
			cell = divide_l;
		}
		j--;
	}

	return cell;

}

int divide_right (int arr[], int &cell)
{
	int divide_r = arr[0];

	int j = 0;

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

	return cell;

}

int happend(int arr[], int &cell1, int &cell2)
{
	int no = -1;

	int divide_l = divide_left(arr,cell1);

	int divide_r = divide_right (arr,cell2);

	if(divide_l == divide_r)
	    return divide_l;
	else
		return no;
}


 

הקוד שלך לא מדפיס לי כלום

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

הקוד שלך לא מדפיס לי כלום

איזה קטע... אז איך לי זה הדפיס אני מבולבל כבר...כי אני שיניתי את התנאי בmain להיות הפוך כלומר found לא שווה -1 אז תדפיס -1 אחרת תדפיס את cell(הודעה למעלה) ושהכנסתי את הדוגמא 180 120 60 30 20 15 זה הדפיס לי 3 אבל מנגד שהכנסתי נגיד 6 5 4 3 2 1 הפלט היה 1 ושהכנסתי 9 0 0 0 0 0 אז הפלט היה ריק

 

 

תודה :)

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

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

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

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

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

  Only 75 emoji are allowed.

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

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

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


×
  • צור חדש...

בראש החדשות:

ביוני הכל יסתדר? תערוכת MWC 2021 מתחילה בגרסה מותאמת לקורונה

במקום חגיגת מובייל גרנדיוזית בברצלונה - אנחנו מקבלים אירוע מצומצם יחסית בשנחאי השבוע, ותוכניות לקאמבק אירופאי במהלך חודש יוני הקרוב תערוכת MWC (ר"ת Mobile World Congress) הייתה האירוע הטכנולוגי הבולט הראשון שסבל מנחת ידה של הקורונה בשנה שעברה, עם הגבלות נאיביות בשלב הראשון, ביטול מלא של האירוע הפיזי לאחר מכן - ובמקביל הבטחות לכך שבשנה הבאה הכל יחזור לקדמותו, כאשר סביר להניח כי באותה נקודת זמן אף אחד לא ניחש או ניבא כי גם ב-2021...

חדש באתר

שירות כביר למעריצים: Diablo 2 Resurrected

שירות כביר למעריצים: Diablo 2 Resurrected

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