Автор Тема: Моля ви помогнете много е спешно!!!  (Прочетена 3117 пъти)

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

anarhiq99

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 6
Моля ви помогнете много е спешно!!!
« -: 12 Декември 2011, 15:09:43 »
Здравейте!Аз имам същия проблем като delqnka.Преди време тя е публикувала една задача на c++ и беше помолила някой да й обясни задачата.Аз ви моля за същото.Тя е обяснена донякъде,дотам я разбрах, но не мога да си обясня останалата част.Ако някой ми помогне ще съм му много благодарен.Задачата е обяснена до Void Dobaviane включително.Моля ви помогнете много е спешно!!!Благодаря предварително.
задачата е следната:

Да се разработи програма, която създава и поддържа честотен речник с думи. речникът да се реализира чрез двоично дърво на търсене с ключ - съответната дума. честотата представлява броя срещания на думата в зададен текст.
програмата трябва да дава възможност на потребителя да:
- добавя нова дума в речника (с начална стойност на брояча за честота 0)
- изтрива дума от речника
- проверява (търси) в речника правописа на думите от зададен текст и актуализира брояча на честотата или извежда подходящо съобщение при сгрешена дума (неоткрита в речника)
-извежда на екрана думите, започващи със зададен низ
- извежда речника на екрана.




Код:


Код: C++
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <iterator>
  5.  
  6. using namespace std;
  7.  
  8. struct tree_node      //deklarirane na darvoto
  9. {
  10.         tree_node* left;
  11.         tree_node* right;
  12.         string info;
  13.         int counter;
  14. };
  15.         tree_node* root;
  16.                 tree_node * T;
  17.    
  18.    
  19. void dobaviane(string key, tree_node *ij )  // realizirame dobaviane  chrez  rekursiq.  ako nqma koren        // se realizira dolnata funkciq  –   tam dobavqme    koren                      
  20. {
  21.   if(key< ij->info)
  22.   {
  23.     if(ij->left!=NULL)
  24.      dobaviane(key, ij->left); //tuk ima rekursiq nalqvo
  25.     else
  26.     {
  27.       ij->left=new tree_node;
  28.       ij->left->info=key;
  29.           ij->left->counter=0;
  30.       ij->left->left=NULL;
  31.       ij->left->right=NULL;
  32.     }  
  33.   }
  34.   else if(key>=ij->info)
  35.   {
  36.     if(ij->right!=NULL)
  37.       dobaviane(key, ij->right); // tuk ima rekursiq nadqsno
  38.     else
  39.     {
  40.       ij->right=new tree_node;
  41.       ij->right->info=key;
  42.           ij->right->counter=0;
  43.       ij->right->left=NULL;
  44.       ij->right->right=NULL;
  45.     }
  46.   }
  47. }
  48.  
  49.  
  50.  
  51.  
  52. void dobaviane(string key) // dobavqne na  koren ako nqma nalichen. Ako ima se izpulnqva gornata  funkciq
  53.  
  54. {
  55.   if(root!=NULL)
  56.   {
  57.     dobaviane(key, root);
  58.   }
  59.   else
  60.   {
  61.     root=new tree_node;
  62.     root->info=key;
  63.         root->counter=0;
  64.     root->left=NULL;
  65.     root->right=NULL;
  66.   }
  67. }
  68.  
  69.  
  70.  
  71.  
  72. void print (string key, tree_node* p) // printira vsichki dumi zapochvashti s niz ‘key’
  73. {
  74.         if (p != NULL)
  75.         {
  76.                 print(key, p->left);
  77.                 size_t found;
  78.                 found=p->info.find(key);
  79.                 if (found!=string::npos)          
  80.                 {
  81. cout << p->info;  cout << " \n"; //printiranena dumite otgovarqshti na iziskvaniqta
  82.                 }
  83.                 print(key, p->right);
  84.         }
  85.         else return;
  86. }
  87.  
  88. void print(string key)
  89. {
  90.         print(key, root) ;
  91. }
  92.  
  93.  
  94.  
  95. void remove(string d, tree_node* &p)  //tazi funkciq e prepisana direktno ot metodi4kite
  96. //sluji za premahwane, kato pyrvo e realizirana maxde,l za da ostane podredeno durvoto
  97. {
  98. void maxdel(tree_node* &T)
  99.  {
  100.   if (T->right!=NULL) maxdel(T->right);
  101.           else {
  102.             root->info=T->info;  
  103.             T=T->left;                  
  104.                         }
  105.  }
  106.         {
  107.  if (p!=NULL)  
  108.   if (d<p->info) remove(d,p->left);
  109.    else if (d>p->info) remove(d,p->right);
  110.          else                                                    
  111.          if (p->left==NULL) p=p->right;                          
  112.           else if (p->right=NULL) p=p->left;    
  113.               else maxdel(p->left);              
  114.         }
  115. }
  116.  
  117.  
  118.  
  119.  
  120. tree_node* search(string key, tree_node* ij) // tursim suvmestimost na dumi sadarjashti stringa 'key'
  121. {
  122.   if(ij!=NULL)
  123.   {
  124.     if(key==ij->info)
  125.       return ij;        
  126.     if(key<ij->info)
  127.       return search(key, ij->left);
  128.     else
  129.       return search(key, ij->right);
  130.   }
  131.   else return NULL;  }
  132.  
  133.  
  134. tree_node* search(string key)
  135. { return search(key, root); }
  136.  
  137. void inorder(tree_node* p)
  138. {
  139.     if(p != NULL)
  140.     {
  141.         if(p->left) inorder(p->left);
  142.         cout<<" "<<p->info<<" ";
  143.         if(p->right) inorder(p->right);
  144.     }
  145.     else return;
  146. }
  147.  
  148.  
  149.  
  150. // vav vectora se zapisva texta, chrez iteratora vlizame vav vectora
  151. void look(vector<string> text)
  152. {
  153.         vector<string>::iterator it;
  154.         string str;
  155.         for (it=text.begin(); it < text.end(); it++)
  156.         {
  157.                 str = *it;
  158.                 tree_node* result = search(str);  //  
  159.  search()
  160.  
  161.                 if (result==NULL)
  162.                 {
  163.                         cout << str << ": Nqma takava duma v rechnika! \n" ;
  164.                 }
  165.                 else
  166.                 {
  167.                         result->counter++;
  168.                         cout << "Dumata " << str << " e namerena : " << result->counter << " pyti. \n"  ;  
  169.  //iskarva na ekrana kolko pati dumite ot teksta se sadarjat v rechnika
  170.                 }
  171.         }
  172.  
  173.         return;
  174. }
  175.  
  176.  
  177. void print()          
  178. {
  179.         inorder(root);
  180. }
  181.  
  182.  
  183.  
  184.  
  185. //glavnata programa
  186. int main()
  187. {
  188.         int ch;//upravlqva menuto      
  189.         char chr;// promenliva za cqla duma                
  190.         string duma;//tova e chastichkite ot dumite koito tyrsim
  191.         vector<string> text;
  192.     while(1)
  193.         {       cout << "                                                   \n";
  194.                 cout << ".....::Menu::.....                                             \n" ;
  195.                 cout << "                                                   \n";
  196.                 cout << "1.Dobavqne na duma                                                                     \n" ;
  197.                 cout << "2.Iztrivane na duma                                                            \n" ;
  198.                 cout << "3.Tyrsene na dumi v tekst                                                      \n" ;
  199.                 cout << "4.Izvejdane na vsichki dumi zapochvashti s ...         \n" ;
  200.                 cout << "                                                   \n" ;
  201.                 cout << "5.Izvejdane na vsi4ki dumi ot rechnika                         \n" ;
  202.                 cout << "                                                   \n" ;
  203.                 cout << "za Izhod natisnete 0...                                                        \n" ;
  204.                 cout << "                                                       \n" ;
  205.                 cout << "Molq vyvedete vashiq izbor : ";
  206.                 cout << "                                                   \n";
  207.                 cout << "                                                   \n";
  208.                 cin >> ch;
  209.                 switch(ch)
  210.                 {
  211.                         case 1:
  212.                                 cout << "Iskate li da dobavite nova duma (Y/N) ? : ";
  213.                                 cin >> chr;
  214.                                 while (chr =='Y' || chr =='y')
  215.                                 {
  216.                                 cout << "Vyvedete dumata: ";
  217.                                 cin >> duma;
  218.                                 dobaviane(duma);
  219.                                 cout << "Iskate li da dobavite o6te edna nova duma (Y/N) ? :  " ;
  220.  
  221.                                 cin >> chr;}
  222.                                 break;
  223.                         case 2:
  224.                                 cout << "Iskate li da iztriete duma (Y/N) ? : ";
  225.                                 cin >> chr;
  226.                                 while (chr =='Y' || chr =='y')
  227.                                 {
  228.                                 cout << "Jelanata duma za iztrivane e: \n" ;
  229.                                 cin >> duma;
  230.                                 remove(duma, T);
  231.                                 cout << "Iskate li da iztriete o6te edna duma (Y/N) ? : \n" ;
  232.                                 cin >> chr;
  233.                                 }
  234.                                 break;
  235.                         case 3:
  236.                                 cout << " \n";
  237.                                 cout << "Tyrsi dumi v text \n";
  238.                                 cout << "Napishete texta si, kogato ste go zavurshili natisnete 0 za izlizane \n" ;
  239.                                 cout << " \n";
  240.                                 do
  241.                                 {
  242.                                         cin >> duma;
  243.                                         text.push_back(duma);
  244.                                 } while (duma.compare("0")!=0);
  245.                                 text.pop_back();
  246.                                 look
  247.                                 (text);
  248.                                 text.clear();
  249.                                 break;
  250.                         case 4:
  251.                                 cout << "                                                   \n";
  252.                                 cout << "Tyrsene na duma s vyveden niz (Y/N) ? : ";
  253.                                 cin >> chr;
  254.                                 while (chr =='Y' || chr =='y')
  255.                                 {
  256.                                 cout << "Vyvedete niz: ";
  257.                                 cin >> duma;
  258.                                 cout << " \n";
  259.                                 cout << "Namerenite dumi sudurja6ti tozi niz sa: \n" ;
  260.                                 printza(duma);
  261.                                 cout << " \n";
  262.                                 cout << "Tyrsene na druga duma sydyrja6ta opredelen niz (Y/N) ? : ";
  263.                                 cin >> chr;}
  264.                                 break;
  265.                         case 5:
  266.                                 cout << " \n";
  267.                                 cout << "Dumite v rechnika sa: " ;
  268.                                 print();
  269.                                 cout << " \n";
  270.                                 cout << " \n";
  271.                                 break;
  272.  
  273.                         case 0:
  274.                                 //system("pause");
  275.                                 return 0;
  276.                                 break;
  277.                 }
  278.     }
  279. }
  280.  
  281.  
  282.  
« Последна редакция: 12 Декември 2011, 18:19:58 от metost »

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: Моля ви помогнете много е спешно!!!
« Отговор #1 -: 12 Декември 2011, 15:32:12 »
Чакай да видим сега... имаш домашна (или контролна, или изпит), нямаш идея как да си напишеш домашната, за сметка на това си я намерил решена, но все пак нямаш идея за какво става въпрос в кода. Сега само трябва да ни обясниш защо да ти помагаме да измамиш системата.

metost

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 13
  • -Получени: 41
  • Публикации: 764
Re: Моля ви помогнете много е спешно!!!
« Отговор #2 -: 12 Декември 2011, 18:18:43 »
@anarhiq99 Оправи си заглавието! Заглавия като това, което си написал не се толерират тук и темата ще замине в коша!
(рɐǝɥ ɹпoʎ uɹпʇ ʇ,uoр)

anarhiq99

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 6
Re: Моля ви помогнете много е спешно!!!
« Отговор #3 -: 12 Декември 2011, 18:46:16 »
Имам курсова работа!Платих за да ми я направят без да потърся в интернет дали има подобна задача.Когато получих кода не ми стана ясно за какво се използва vektor и какво прави всеки отделен негов ред.затова ми трябва помощ.не разбирам много от c++.

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: Моля ви помогнете много е спешно!!!
« Отговор #4 -: 12 Декември 2011, 18:55:46 »
А сега кажи каква оценка според теб трябва да има човен дето не разбира и други му пишат курсовата!

wuser

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 85
  • -Получени: 49
  • Публикации: 2761
Re: Моля ви помогнете много е спешно!!!
« Отговор #5 -: 12 Декември 2011, 19:00:51 »
Я скоро си говорехме за вектори. Я виж кой е първия резултат по: c++ vector.

http://www.cplusplus.com/reference/stl/vector/

След него е просто невероятно нещо по тях да не ти е ясно. С две думи това са масиви, но в тях могат динамично да се добавят и премахват членове.
Мъдростта на патилото
Perl Monks: PHP - it's "training wheels without the bike" -- Randal L. Schwartz


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

anarhiq99

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 6
Re: Моля ви помогнете много е спешно!!!
« Отговор #6 -: 12 Декември 2011, 19:09:10 »
Виж просто помолих за помощ.Какво да правя да стоя с кръстени ръце?Не съм казал че не разбирам абсолютно нищо на c++.На някои им се отдава повече на други не.Упражненията които имаме са на Pascal, а на лекции сме учили само добавяне и изтриване на дърво.Затова я дадох да ми я направят, защото нямаше да се справя сам, а и никой не се съгласи да допълни кода с който съм почнал,защото логиката на всеки е различна.

HanKrum

  • Гост
Re: Моля ви помогнете много е спешно!!!
« Отговор #7 -: 12 Декември 2011, 19:14:35 »
Аз не съм станал архитект именно защото не мога да чертая добре.

anarhiq99

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 6
Re: Моля ви помогнете много е спешно!!!
« Отговор #8 -: 12 Декември 2011, 19:18:32 »
Защо просто не кажете, че не можете да ми помогнете, а само се заяждате.Не съм публикувал темата , за да се заяждам с някой или те да се заяждат с мен, а защото имам нужда от помощ.

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: Моля ви помогнете много е спешно!!!
« Отговор #9 -: 12 Декември 2011, 19:47:22 »
Такаааа, не виждам що реши че се заяжда някой тук. Ни най малко (даже и Стил не го прави в монета). Ако имаш конкретен въпрос може и да получиш конкретен отговор. Виж Гошко ти е дал линк за вектори. Ако не знаеш какво е вектор поне малко от малко, сигурен ли си че не си учил С а не С++?
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

anarhiq99

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 6
Re: Моля ви помогнете много е спешно!!!
« Отговор #10 -: 12 Декември 2011, 19:56:43 »
Аз съм учил c++.А конкретния ми въпрос е какво прави всеки отделен ред на функцията void look.и какво правят тези команди
                size_t found;
                found=p->info.find(key);
                if (found!=string::npos)           
                {

echeveria

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

onewg

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 62
Re: Моля ви помогнете много е спешно!!!
« Отговор #12 -: 18 Януари 2012, 19:51:31 »
Код: C++
  1. if (found!=string::npos)          
  2.                 {
  3.  

Само един въпрос... :o

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

kerkenez

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 2
  • -Получени: 14
  • Публикации: 1205
Re: Моля ви помогнете много е спешно!!!
« Отговор #13 -: 19 Януари 2012, 00:25:52 »
Моля, ако някой ще обяснява на onewg по темата да обяснява и без повече въпроси като "каква оценка смяташ че трябва да получиш?". Все пак иска да разбере как работи кода а не го иска наготово.