Автор Тема: Обяснение на задача написана на С++  (Прочетена 11133 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

delqnka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 16
Re: Обяснение на задача написана на С++
« Отговор #30 -: 16 Януари 2011, 20:17:41 »
може ли да ми обясните тези две функции
void print (string key, tree_node* p) // printira vsichki dumi zapochvashti s niz ‘key’
{
   if (p != NULL)
   {
      print(key, p->left);
      size_t found;
      found=p->info.find(key);
      if (found!=string::npos)           
      {
cout << p->info;  cout << " \n"; //printiranena dumite otgovarqshti na iziskvaniqta
      }
      print(key, p->right);
   }
   else return;
}





void remove(string d, tree_node* &p)  //tazi funkciq e prepisana direktno ot metodi4kite
//sluji za premahwane, kato pyrvo e realizirana maxde,l za da ostane podredeno durvoto
{
void maxdel(tree_node* &T)
 {
  if (T->right!=NULL) maxdel(T->right);
     else {
            root->info=T->info;   
            T=T->left;         
         }
 }
   {
 if (p!=NULL) 
  if (d<p->info) remove(d,p->left);
   else if (d>p->info) remove(d,p->right);
         else                     
         if (p->left==NULL) p=p->right;            
          else if (p->right=NULL) p=p->left;   
              else maxdel(p->left);      
   }
}



tree_node* search(string key, tree_node* ij) // tursim suvmestimost na dumi sadarjashti stringa 'key'
{
  if(ij!=NULL)
  {
    if(key==ij->info)
      return ij;         
    if(key<ij->info)
      return search(key, ij->left);
    else
      return search(key, ij->right);
  }
  else return NULL;  }


tree_node* search(string key)
{ return search(key, root); }


Много ще съм ви благодарна за разясненията

intel

  • Гост
Re: Обяснение на задача написана на С++
« Отговор #31 -: 20 Януари 2011, 18:05:39 »
Ще обясня принципа и начина на логика на цялостните функции, но ти ако не знаеш основните неща - аз не искам да пиша мнения-фермани и да ставам учител тепърва. Ти искаш помощ за обяснение на принципа? Ако е така прочети внимателно обяснението ми и се опитай да го разбереш.   Ако не е така, помоли друг да сподели обяснение1.


Код: PHP
  1. void print (string key, tree_node* p) // printira vsichki dumi zapochvashti s niz ‘key’
  2. {
  3.         if (p != NULL)
  4.         {
  5.                 print(key, p->left);
  6.                 size_t found;
  7.                 found=p->info.find(key);
  8.                 if (found!=string::npos)          
  9.                 {
  10. cout << p->info;  cout << " \n"; //printiranena dumite otgovarqshti na iziskvaniqta
  11.                 }
  12.                 print(key, p->right);
  13.         }
  14.         else return;
  15. }
  16.  
Конкретно за print() функцията, предполагам вече си се запознала със структурата tree_node(ако не си - 1).
Така сега като знаеш структурата си представи, че това е дърво по което се катериш.
На това дърво има череши, които са здрави, сочни и зрели, но има и череши които са изгнили, развалени или все още не са узрели.
Почваш да се катериш по дървото и се оглеждаш на всеки клон дали черешите са хубави или не. Виждаш на единия клон, че има много
хубави череши и тръгваш по него да ги събереш. Но този клон има и разклонения, на които има и хубави и лоши череши.

И реално какво става, ти събираш само хубавите череши, а лошите въобще не ги пипаш, съответно въобще не ходиш по клоните където са лошите череши. И така си събираш хубавите череши и слизаш от дървото. Накрая ще се попиташ за какво толкова време си ги събирал тези череши? Ами за да може после да ги покажеш на пазара и евентуално да ги продадеш.

Т.е. тази функция по-горе ти я описах с типична битова ситуация. Подбираш в единия случай череши(решил си че ще са само хубавите), а в другия случай(от програмна гледна точка), просто с тази функция подбираш всички възли от дървото в които има определен key(ключ), който ти предварително си задала(както при черешите решаваш дали ще събираш хубавите за продан, или лошите за Ракия, така и избираш ключ примерно числото 10 или числото -10 ;) )

Така че ключа(key) , който задаваш да се търси p -това са ти хубавите череши! Това е асоциацията.


Код: PHP
  1. void remove(string d, tree_node* &p)  //tazi funkciq e prepisana direktno ot metodi4kite
  2. //sluji za premahwane, kato pyrvo e realizirana maxde,l za da ostane podredeno durvoto
  3. {
  4. void maxdel(tree_node* &T)
  5.  {
  6.   if (T->right!=NULL) maxdel(T->right);
  7.           else {
  8.             root->info=T->info;  
  9.             T=T->left;                   
  10.                         }
  11.  }
  12.         {
  13.  if (p!=NULL)  
  14.   if (d<p->info) remove(d,p->left);
  15.    else if (d>p->info) remove(d,p->right);
  16.          else                                                    
  17.          if (p->left==NULL) p=p->right;                          
  18.           else if (p->right=NULL) p=p->left;     
  19.               else maxdel(p->left);              
  20.         }
  21. }

Тука тая функция е мааалко по-сложна, но пак не е нещо свръх сложно за разбиране.
Я си представи, че имаш пак черешово дърво, обаче някои клони са прогнили. За да се спре спре гниенето и да не прогние цялото дърво, трябва да се отрежат гнилите клони, но не и здравите.

Еми тази функция е има подобно действие в задачата, маха точно определено разклонение на дървото, без да маха другото.
И тука ще кажеш, ми то не е сложно. Да ама тука има едно НО, след което следва сложното.

Представи си един от клоните на дървото и той е изгнил само по средата. Обаче още не се е отчупил.
Еми тука ако трябва функцията да е точна, трябва да изрежем развалената част по средата, и да залепим здравия край на клона за стъблото на дървото. Ето това е сложното. Т.е. не трябва да остане всичкото, което е здраво, а само изгнилото да се изреже.

Тука пример-а не е много подходящ защото малко обърква това рязане на клона по средата, но аз обяснявам принципа. Ако друг се навие да даде по-подходящ пример/съпоставка...


Код: PHP
  1. tree_node* search(string key, tree_node* ij) // tursim suvmestimost na dumi sadarjashti stringa &#39;key&#39;
  2. {
  3.   if(ij!=NULL)
  4.   {
  5.     if(key==ij->info)
  6.       return ij;        
  7.     if(key<ij->info)
  8.       return search(key, ij->left);
  9.     else
  10.       return search(key, ij->right);
  11.   }
  12.   else return NULL;  }
  13.  
  14.  
  15. tree_node* search(string key)
  16. { return search(key, root); }


Такам, третата функция е "най-сложната" като разбиране. Т.е. думичката съвместимост, малко збозва нещата и мисленето на новобранците.

Но първо искам да ми кажеш дали обяснението ми ти е помогнало или напротив, дали не те е объркало още повече.
Ако си успяла да направиш асоциация за първата функция, искам да обясниш асоциацията във втората функция. Т.е. гнилото на кое отговаря в функцията. Така ще разберем дали схващаш нещата или не. Иначе най-лесно е да ти дадем някакво обяснение, ти да го представиш на еди кой си и точно след 1 ден, няма да е останало нищо от това обяснение в твоята глава.

А се предполага че ти учиш, влагаш усилия и си губиш времето с това, за да може уш един ден да го работиш това. И как се очаква, че ще го работиш това без да си го разбрал. Затова ако си го разбрала - кажи асоциацията за втората функция и дори се опитай да дадеш някакво разсъждение за третата - няма значение дали ще е грешно, просто МИСЛИ ;) .

ПС: Моля модераторите ако ме мислят за луд да изтрият коментара ми :D
« Последна редакция: 20 Януари 2011, 18:07:18 от intel »

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: Обяснение на задача написана на С++
« Отговор #32 -: 20 Януари 2011, 18:28:24 »
@intel не е ли малко след дъжда качулка?
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

intel

  • Гост
Re: Обяснение на задача написана на С++
« Отговор #33 -: 20 Януари 2011, 18:35:58 »
Ами извинявам се на авторката на темата, но просто пътувах тия дни. Да му се не види - оказа се, че не се е изпратил поста ми и сега като пуснах кошa  се изпрати автоматично, защото си имам Save State...

Бях го написал още като попита авторката...
« Последна редакция: 20 Януари 2011, 18:48:46 от intel »

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: Обяснение на задача написана на С++
« Отговор #34 -: 20 Януари 2011, 18:41:39 »
А то лошо няма де написаното си е написано, който иска може да го научи и без да гони срокове ;)
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Re:Обяснение на задача написана на С++
« Отговор #35 -: 26 Юли 2011, 22:00:36 »
Не знаете какво е това ->    :) трябва да седнете още да учите..

wuser

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 85
  • -Получени: 49
  • Публикации: 2761
Re:Обяснение на задача написана на С++
« Отговор #36 -: 26 Юли 2011, 22:35:52 »
Ей Уан, кога ще има продължение на серията ти от уроци?

По между другото аз се посмях на това да се ползват йострийм и стринг едновременно. Всеки луд с номера си.
« Последна редакция: 26 Юли 2011, 22:38:18 от wuser »
Мъдростта на патилото
Perl Monks: PHP - it's "training wheels without the bike" -- Randal L. Schwartz


Дееба... чувствам се все едно обяснявам на майка ми как да си отвори пощата
"не работи"
WTF?!?!? к'во значи че не работи?
Не ти се компилира, дава ти грешка, вади ти грешни резултати, компютърът ти се изключва като го напишеш или на целия квартал му спира тока?
Stilgar

Raicho

  • Гост
Re:Обяснение на задача написана на С++
« Отговор #37 -: 27 Юли 2011, 05:39:19 »
Мммм да тя не знае какво е if вие за матрици и говорите според мен поне да разбере какво е int,string и така нататък типове данни ! Как искаш да ти се разясни код като ти незнаеш елементарни работи ..... И все пак ако я и го разясните сте +100

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re:Обяснение на задача написана на С++
« Отговор #38 -: 27 Юли 2011, 14:04:34 »
Кое не е ясно в това, че темата е изчерпана?
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

anarhiq99

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 6
Re: Обяснение на задача написана на С++
« Отговор #39 -: 12 Декември 2011, 14:48:41 »
Моля ви помогнете ми с обяснението на задачата докрай?