עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

מצביעים

Featured Replies

פורסם
  • מחבר

מה עושים אם אני רוצה לבנות עץ בעל 20 איברים, ולאחר 7 הכנסות מופיעה לי ההודעה:


An unhandled exception of type 'System.StackOverFlowExcpection'
occurred in shira.exe

ויש לי אפשרות לבחור בין Break ל Continue (שגם כן סוגר את התכנית)

יש אפשרות למנוע את הופעת החלון הזה ולהמשיך ת'תרגיל?????

מה עושים עם המחסנית הזו?

פורסם

stack overflow אומר שיש לך רקורסיה אינסופית. (כלומר, לא באמת אינסופית, אלא פשוט שלא מגיעה לתנאי העצירה הנורמלי שלה)

פורסם
  • מחבר

אז איך מוצאת ועוצרת אותה??

<ההודעה מופיעה לי על השורה הראשונה בפונקציה Insert

   if (current->value < val)   

>

פורסם

איפה בדיוק זה מופיע זה כבר לא משנה.

אם תסתכלי על ה- stack שלך במצב הזה את תראי כמה עשרות/מאות קריאות לפונקציה, עם הפרמטרים של כל אחת.

זה יאפשר לך לראות למה הפונקציה נקראת הרבה יותר מדי פעמים.

פורסם
  • מחבר

ואיפה בדיוק אני מסתכלת על הSTACK ??????????

יש אפשרות לרוקן אותה?

<במילים אחרות: יש בעיה, איך פותרים אותה?>

תודה

פורסם

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

ב- Visual Studio 2005 את יכולה להסתכל בו דרך Debug->Windows->Call Stack

נדמה לי שב- Visual Studio 6 אפשר לראות אותו דרך View->Debug Windows->Call Stack.

פורסם
  • מחבר

הצילו!!!!!!!!

מה לא נכון פה????


#include <iostream>
#include <assert.h>
#include "Tree.h"
using namespace std;

template <class T>
class BRtree: public Tree<T>
{
private:
Node<T>* parent;
int color;

Node<T>* Insert(T val);
Node<T>* Insert(Node<T>*current, T val, Node<T>*parent);
void Update (Node<T>*current);
Node<T>* RemoveTop(Node<T>*);

int includes(Node<T>*current, T val) const;
Node<T>* includes(Node<T>*current, T val);

void Right(Node<T>*current);
void Left(Node<T>*current);

void FixUp(Node<T>*current);


public:
BRtree();
void Add(T val);//äåñôú áï
void Remove (T val);//îçé÷ú áï
int Includes(T val) const;

void getcolor();
void print();
};

template <class T>
BRtree<T>::BRtree()
{
Tree<T>();
parent = NULL;
color = 0;
}

template <class T>
void BRtree<T>::Add(T val)
{
Node<T>* current;
Insert(val);
current=includes(root,val);
Node<T>*ezer;

if(current->parent==NULL)
{
current=root;
root->color=1;
return;
}
else
{
while((current!=root)&&(current->parent->color==0))
{
if(current->parent==current->parent->parent->left)
{
ezer=current->parent->parent->right;
if((ezer!=NULL)&&(ezer->color==0))
{
current->parent->color=1;
ezer->color=1;
current->parent->parent->color=0;

current=current->parent->parent;
}
else
{
if(current==current->parent->right)
{
current=current->parent;

Left(current);
}

else
{
current->parent->color=1;
current->parent->parent->color=0;

Right(current->parent);
}
}
}
else
{
ezer=current->parent->parent->left;
if((ezer!=NULL)&&(ezer->color==0))
{
current->parent->color=1;
ezer->color=1;
current->parent->parent->color=0;

current=current->parent->parent;
}
else
{
if(current==current->parent->left)
{
current=current->parent;

Right(current);
}
else
{
current->parent->color=1;
current->parent->parent->color=0;

Left(current->parent);
}
}
}
} root->color=1;
}

}

template <class T>
Node<T>* BRtree<T>::Insert(T val)
{
if (!root)
{
root=new Node<T>(val,NULL,NULL,NULL,0);
return root;
}

Node<T>*p = root;

return Insert(root,val,p);
}

template <class T>
Node<T>* BRtree<T>::Insert(Node<T>*current, T val, Node<T>*parent)
{
if (current->value < val)
{ // Add to right subtree
if (!current->right)
{
current->right=new Node<T>(val,NULL,NULL,current,0);
return current->right;
}
else
{
Insert(current->right,val,current);
}
}
else
{ // Add to left subtree
if (!current->left)
{
current->left=new Node<T>(val,NULL,NULL,current,0);
return current->left;
}
else
{
Insert(current->left,val,current);
}
}
}

template <class T>
void BRtree<T>::Right(Node<T>*current)
{//current->x
Node<T>*ezer=current->parent;

if(current->right!=NULL)
{
ezer->left=current->right;
}
else
{
ezer->left=NULL;
}

current->right= ezer;

if(ezer->parent==NULL)
{
current->parent=NULL;
}
else
{
current->parent=ezer->parent;
if(ezer->parent->right==ezer)
{
ezer->parent->right=current;
}
else
{
ezer->parent->left=current;
}
}

ezer->parent=current;

if(current->parent==NULL)
{
root=current;
}
}

template <class T>
void BRtree<T>::Left(Node<T>*current)
{//current=y
Node<T>*ezer=current->parent;

if(current->left!=NULL)
{
ezer->right=current->left;
}
else
{
ezer->right=NULL;
}

current->left= ezer;

if(ezer->parent==NULL)
{
current->parent=NULL;
}
else
{
current->parent=ezer->parent;
if(ezer->parent->right==ezer)
{
ezer->parent->right=current;
}
else
{
ezer->parent->left=current;
}
}

ezer->parent=current;

if(current->parent==NULL)
{
root=current;
}
}

template <class T>
Node<T>* BRtree<T>::includes(Node<T>*current, T val)
{
// see if argument value occurs in tree
if(!current)
{
return NULL; // not found
}
if (current->value == val)
{
return current;
}
if (current->value < val)
{
return includes(current->right,val);
}
else
{
return includes(current->left,val);
}
}

פורסם

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

פורסם
  • מחבר

נראה לי שיש לי בעיה בפונקציה INSERT, יש לי אפשרות להריץ את התכנית אבל-


warning C4715: 'BRtree<int>::Insert' : not all control paths return a value

מה הלאה?

פורסם

תבדקי אם יש IF מסויים שלא עשית בו RETURN.

פורסם
  • מחבר

זאת אומרת שבקריאה הרקורסיבית לפונקציה לעשות כך:


return Insert(current->right,val,current);

במקום


Insert(current->right,val,current);

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.