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

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

delqnka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 16
Re: Обяснение на задача написана на С++
« Отговор #15 -: 14 Януари 2011, 22:12:46 »
да си призная нищо не разбрам затова търся помощ за обяснението на задачата

Avalanche

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 65
  • -Получени: 275
  • Публикации: 2602
  • meow
Re: Обяснение на задача написана на С++
« Отговор #16 -: 14 Януари 2011, 22:15:46 »
да си призная нищо не разбрам затова търся помощ за обяснението на задачата
Това прозвуча доста не добре, поне операторите if/else, cout/cin, функциите или поне указателите?
"Компютрите не правят каквото искаме, а каквото им кажем." Ако разбереш какво значи това няма да имаш големи проблеми, нито с никоя ОС, нито език, или софтуер.
Аз не съм програмист между другото!

delqnka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 16
Re: Обяснение на задача написана на С++
« Отговор #17 -: 14 Януари 2011, 22:46:06 »
ами не разбирам нищо от програмиране там ми е слабото място
помогнете ми със задачата много ви моля

xzsa

  • Jr. Member
  • **
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 66
Re: Обяснение на задача написана на С++
« Отговор #18 -: 14 Януари 2011, 23:03:08 »
Виж първо какво е двоично дъево: http://tinyurl.com/6hqsuwl



Код: C++
  1. struct tree_node //deklarirane na darvoto
  2. {
  3. tree_node* left;
  4. tree_node* right;
  5. string info;
  6. int counter;
  7. };

Този код ти дефинира едно от тези кръгчета на картинката. Както виждаш всяко кръгче (връх) е свързано с два други връха условно наречени ляв и десен наследник.
tree_node* left; - е указател към левия наследник на текущия връх,
tree_node* right; - е указател към десния наследник на текущия връх.
Освен това всеки връх има и две свойства:
едното е текстов стринг и се нарича info: string info;, а другото е цяло число и се нарича counter: int counter;.

От картинката се вижда, че има едно кръгче, на което всички останали са наследници (кръгчето с N 2 на картинката) то се нарича корен на дървото (root).
За да построим дървото трябва да започнем от корена. За това служи функцията:

Код: C++
  1. void dobaviane(string key) // dobavqne na koren ako nqma nalichen. Ako ima se izpulnqva gornata funkciq
  2.  
  3. {
  4. if(root!=NULL)
  5. {
  6.     dobaviane(key, root);
  7. }
  8. else
  9. {
  10.     root=new tree_node;
  11.     root->info=key;
  12.     root->counter=0;
  13.     root->left=NULL;
  14.     root->right=NULL;
  15. }
  16. }
  17.  

if(root!=NULL) - проверява дали съществува корена (root) и ако съществува се извиква функцията dobaviane(key, root); която ще обясня какво прави по-късно.
Ако корена не съществува тогава го създаваме:
Код: C++
  1.     root=new tree_node;
  2.     root->info=key;
  3.     root->counter=0;
  4.     root->left=NULL;
  5.     root->right=NULL;

root=new tree_node; - създаваме нов възел (с име root), който ще бъде корена на дървото и му задаваме свойствата:
root->info=key; - стринга key който функцията приема като параметър го задаваме на свойството info на корена.
root->counter=0; на свойството counter (брояч) на корена задаваме да е равно на 0.
root->left=NULL; root->right=NULL; - задаваме, че за сега корена няма нито ляв нито десен наследник, но по късно можем да му добавим.

Функцията:
Код: C++
  1. void dobaviane(string key, tree_node *ij ) // realizirame dobaviane chrez rekursiq. ako nqma koren // se realizira dolnata funkciq – tam dobavqme koren
  2. {
  3. if(key< ij->info)
  4. {
  5.     if(ij->left!=NULL)
  6.         dobaviane(key, ij->left); //tuk ima rekursiq nalqvo
  7.     else
  8.     {
  9.         ij->left=new tree_node;
  10.         ij->left->info=key;
  11.         ij->left->counter=0;
  12.         ij->left->left=NULL;
  13.         ij->left->right=NULL;
  14.     }
  15. }
  16. else if(key>=ij->info)
  17. {
  18.     if(ij->right!=NULL)
  19.         dobaviane(key, ij->right); // tuk ima rekursiq nadqsno
  20.     else
  21.     {
  22.         ij->right=new tree_node;
  23.         ij->right->info=key;
  24.         ij->right->counter=0;
  25.         ij->right->left=NULL;
  26.         ij->right->right=NULL;
  27.     }
  28. }
  29. }
  30.  

служи за добавяне на възел към съществуващо дърво. Дори само един корен вече можем да го смятаме за дърво и с тази функция можем да добавяме към него допълнително възли. Тази функция приема два параметъра: стринга key и указарел към върха (кръгчето от рисунката) tree_node *ij на който искаме да зададем свойството info да е равно на параметъра който подаваме key.
Но с помощта на тази функция ние създаваме подредено двоично дърво в него ключа на всеки пряк ляв наследник е по-малък от този на родителя, а ключа на всеки пряк десен наследник е по-голям от този на родителя.
Пример:



if(key < ij->info) - проверява дали параметъра  key който сме подали на функцията е по- малък от свойството info на върха който сме подели като параметър на функцията и ако това е истина проверяваме дали текущият възел има ляв наследник: if(ij->left!=NULL) в такъв случай рекурсивно извикваме функцията dobaviane за него и всичко описано до тук за тази функция се повтаря за левия наследник. Ако няма ляв наследник си създаваме нов с кода ij->left=new tree_node; и след това му задаваме необходимите свойства.
По аналогичен начин ако параметъра key който сме подали на функцията е по- голям или равен от свойството info на върха действаме с десния наследник.

Спирам до тук. Не мога да обясня за 15 минути нещо което се учи един семестър.
Така както си дала кода е само някаква част от програмата и няма да работи.

delqnka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 16
Re: Обяснение на задача написана на С++
« Отговор #19 -: 14 Януари 2011, 23:59:45 »
да знам че не цялата задача имам я цялата ама съм копирала само част не знам защо се е получило така
това е останалия код от програмата

Код: C++
  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); }
  17.  
  18. void inorder(tree_node* p)
  19. {
  20.     if(p != NULL)
  21.     {
  22.         if(p->left) inorder(p->left);
  23.         cout<<" "<<p->info<<" ";
  24.         if(p->right) inorder(p->right);
  25.     }
  26.     else return;
  27. }
  28.  
  29.  
  30.  
  31. // vav vectora se zapisva texta, chrez iteratora vlizame vav vectora
  32. void look(vector<string> text)
  33. {
  34.         vector<string>::iterator it;
  35.         string str;
  36.         for (it=text.begin(); it < text.end(); it++)
  37.         {
  38.                 str = *it;
  39.                 tree_node* result = search(str);  //  
  40.  search()
  41.  
  42.                 if (result==NULL)
  43.                 {
  44.                         cout << str << ": Nqma takava duma v rechnika! \n" ;
  45.                 }
  46.                 else
  47.                 {
  48.                         result->counter++;
  49.                         cout << "Dumata " << str << " e namerena : " << result->counter << " pyti. \n"  ;  
  50.  //iskarva na ekrana kolko pati dumite ot teksta se sadarjat v rechnika
  51.                 }
  52.         }
  53.  
  54.         return;
  55. }
  56.  
  57.  
  58. void print()          
  59. {
  60.         inorder(root);
  61. }
  62.  
  63.  
  64.  
  65.  
  66. //glavnata programa
  67. int main()
  68. {
  69.         int ch;//upravlqva menuto      
  70.         char chr;// promenliva za cqla duma                
  71.         string duma;//tova e chastichkite ot dumite koito tyrsim
  72.         vector<string> text;
  73.     while(1)
  74.         {       cout << "                                                   \n";
  75.                 cout << ".....::Menu::.....                                             \n" ;
  76.                 cout << "                                                   \n";
  77.                 cout << "1.Dobavqne na duma                                                                     \n" ;
  78.                 cout << "2.Iztrivane na duma                                                            \n" ;
  79.                 cout << "3.Tyrsene na dumi v tekst                                                      \n" ;
  80.                 cout << "4.Izvejdane na vsichki dumi zapochvashti s ...         \n" ;
  81.                 cout << "                                                   \n" ;
  82.                 cout << "5.Izvejdane na vsi4ki dumi ot rechnika                         \n" ;
  83.                 cout << "                                                   \n" ;
  84.                 cout << "za Izhod natisnete 0...                                                        \n" ;
  85.                 cout << "                                                       \n" ;
  86.                 cout << "Molq vyvedete vashiq izbor : ";
  87.                 cout << "                                                   \n";
  88.                 cout << "                                                   \n";
  89.                 cin >> ch;
  90.                 switch(ch)
  91.                 {
  92.                         case 1:
  93.                                 cout << "Iskate li da dobavite nova duma (Y/N) ? : ";
  94.                                 cin >> chr;
  95.                                 while (chr ==&#39;Y&#39; || chr ==&#39;y&#39;)
  96.                                 {
  97.                                 cout << "Vyvedete dumata: ";
  98.                                 cin >> duma;
  99.                                 dobaviane(duma);
  100.                                 cout << "Iskate li da dobavite o6te edna nova duma (Y/N) ? :  " ;
  101.  
  102.                                 cin >> chr;}
  103.                                 break;
  104.                         case 2:
  105.                                 cout << "Iskate li da iztriete duma (Y/N) ? : ";
  106.                                 cin >> chr;
  107.                                 while (chr ==&#39;Y&#39; || chr ==&#39;y&#39;)
  108.                                 {
  109.                                 cout << "Jelanata duma za iztrivane e: \n" ;
  110.                                 cin >> duma;
  111.                                 remove(duma, T);
  112.                                 cout << "Iskate li da iztriete o6te edna duma (Y/N) ? : \n" ;
  113.                                 cin >> chr;
  114.                                 }
  115.                                 break;
  116.                         case 3:
  117.                                 cout << " \n";
  118.                                 cout << "Tyrsi dumi v text \n";
  119.                                 cout << "Napishete texta si, kogato ste go zavurshili natisnete 0 za izlizane \n" ;
  120.                                 cout << " \n";
  121.                                 do
  122.                                 {
  123.                                         cin >> duma;
  124.                                         text.push_back(duma);
  125.                                 } while (duma.compare("0")!=0);
  126.                                 text.pop_back();
  127.                                 look
  128.                                 (text);
  129.                                 text.clear();
  130.                                 break;
  131.                         case 4:
  132.                                 cout << "                                                   \n";
  133.                                 cout << "Tyrsene na duma s vyveden niz (Y/N) ? : ";
  134.                                 cin >> chr;
  135.                                 while (chr ==&#39;Y&#39; || chr ==&#39;y&#39;)
  136.                                 {
  137.                                 cout << "Vyvedete niz: ";
  138.                                 cin >> duma;
  139.                                 cout << " \n";
  140.                                 cout << "Namerenite dumi sudurja6ti tozi niz sa: \n" ;
  141.                                 printza(duma);
  142.                                 cout << " \n";
  143.                                 cout << "Tyrsene na druga duma sydyrja6ta opredelen niz (Y/N) ? : ";
  144.                                 cin >> chr;}
  145.                                 break;
  146.                         case 5:
  147.                                 cout << " \n";
  148.                                 cout << "Dumite v rechnika sa: " ;
  149.                                 print();
  150.                                 cout << " \n";
  151.                                 cout << " \n";
  152.                                 break;
  153.  
  154.                         case 0:
  155.                                 //system("pause");
  156.                                 return 0;
  157.                                 break;
  158.                 }
  159.     }
  160. }


« Последна редакция: 15 Януари 2011, 18:04:10 от borovaka »

delqnka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 16
Re: Обяснение на задача написана на С++
« Отговор #20 -: 15 Януари 2011, 00:05:18 »
Реших да сложа на едно място цялата програма Ето я и нея Ще се радвам да има хора които разбират от програмиране на С++ които да могат да ми разяснят нещата с моята програма Просто това прогламиране много ме затруднява не мога да го разбераМНОГО ЩЕ СЪМ ВИ  БЛАГОДАРНА АКО МИ ПОМОГНЕТЕ ДА РАЗБЕРА ПРОГРАМАТА И благодаря за разясненията в началота на задачата на xzsa

Код:
 
Код: 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 &#39;key&#39;
  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 ==&#39;Y&#39; || chr ==&#39;y&#39;)
  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 ==&#39;Y&#39; || chr ==&#39;y&#39;)
  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 ==&#39;Y&#39; || chr ==&#39;y&#39;)
  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.  
  283.  
« Последна редакция: 15 Януари 2011, 08:21:22 от echeveria »

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: Обяснение на задача написана на С++
« Отговор #21 -: 15 Януари 2011, 08:38:53 »
Дори да ти обясним с такъв пример няма как да разбереш какво оджаба става без капка обща култура.

Код: C++
  1. include <iostream>
  2. include <string>
  3. include <vector>
  4. include <iterator>
  5.  
  6. using namespace std;

Това е начина по който се добавят странични файлове и библиотеки. това са използваните стандартни библиотеки ето линк коя за какво е:
http://en.wikipedia.org/wiki/Iostream
В дясно има линкове за другите след основната.

using namespace std;

Ся тва как да ти го обясня като не знаеш какво е пространство от имена?
С това определяш че ще ползваш неща назовани по определен начин от библиотеките.

Ясно ли ти е всично в main()
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

delqnka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 16
Re: Обяснение на задача написана на С++
« Отговор #22 -: 15 Януари 2011, 10:22:08 »
знам че main е главната програма където се извикват функциите които сме писали преди нея това знам

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: Обяснение на задача написана на С++
« Отговор #23 -: 15 Януари 2011, 17:04:34 »
Искам да кажа че xzsa е бил доста обстоен за първия ти поставен код (повече от колкото аз щях да бъда) въпроса е знаеш ли какво се случва с кода в main()?
Знаеш ли какво са обикновени неща като структура, функция, клас, int string, char, float?
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

delqnka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 16
Re: Обяснение на задача написана на С++
« Отговор #24 -: 15 Януари 2011, 17:11:46 »
да някои неща ги разбирам но не знам как да ги обясня на госпожата тя иска да ги обясня с компютърни термини а аз не мога така
затова и търся помощ с обяснението на кода на задачата

echeveria

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 72
  • -Получени: 93
  • Публикации: 4836
Re: Обяснение на задача написана на С++
« Отговор #25 -: 15 Януари 2011, 17:21:12 »
Код: C++
  1.    int ch;//upravlqva menuto  
  2.    char chr;// promenliva za cqla duma                
  3.    string duma;//tova e chastichkite ot dumite koito tyrsim

Тази част според мен е неправилно обясняна от коментарите (всичко след // е коментар)

int  е тип данни това значи че ch може да носи стойност само на цяло число тоест: 1 2 3 55 77 4000
 Има видео урок тука за типове данни в С те са същите като в С++ само дето няма "string"
"char" това не може да е вярно защото може да дадеш стойност замо един знак (а, д, з .s, r .Y, N) таяка че коментара според мен не е верен // promenliva za cqla duma
В часта от нода който разгледах това е начина да кажеш на менюто да или не Y/N.

След малко може пак да обясня нещо ако имам нет!
Днес Печатарите използват парите за да купят мозъците на онези, които ги превъзхождат, за да ги накарат да им служат и така да се превърнат в жертва на посредствеността. Това ли е причината, поради която ги наричате благо?
<iframe src="http://www.corbindavenport.com/ubuntu/widget.html" style="width:

borovaka

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 1
  • -Получени: 48
  • Публикации: 906
Re: Обяснение на задача написана на С++
« Отговор #26 -: 15 Януари 2011, 18:25:21 »
Я сподели кой курс в университета си.
По принцип трябва да знаеш как се изговарят словесно дадени операции в програмата. Примерно ако имаш цикъл от вида:

for (int i=0; i <= 10; i++) cout << "Proba";
Трябва да кажеш, че това е цикъл който върти докато управляващата променлива i достигне стойност по-голяма от 10, като на всяко завъртане на цикъла променливата се инкрементира ( прибавя се 1 към предходната стойност). В случая ще получиш 11 извеждания на Proba, това се получава защото броенето започва от 0.

cout << "Text" << endl; Можеш да кажеш в случая, че извеждаш Text на екрана.

cin >> var;  От клавиатурата въвеждаш стойност на променливата var.

Сега какво е това рекурсия ...

По принцип това е функция която в тялото си вика себе си. Малко е неясно така и ще ти дам един пример. Следната функция ще изведе на екрана числата от въведеното до 1:

Код: C++
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void chislo (int);
  6.  
  7. int main () {
  8.         int i;
  9.         cin >> i;
  10.         chislo(i);
  11. }
  12.  
  13. void chislo ( int n ) {
  14.  if (n!=0) {
  15.         cout << n << " ";
  16.         chislo (n-1);
  17.         }
  18. }
  19.  

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

Аз си мисля, че на теб няма да ти искат да обясняваш какво прави всеки ред от програмата а принципа на действие на всяка функция. А това обяснение го имаш в коментарите на програмата ти. Ако научиш тях мисля, че ще вземеш изпита.
Ако има нещо друго което не разбираш питай. Предполагам, че ще има някой който да ти помогне.
Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

delqnka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 16
Re: Обяснение на задача написана на С++
« Отговор #27 -: 15 Януари 2011, 22:52:13 »
аз съм втори курс и да ти кажа и аз си мислех че ще искат да знам само функцията но започнаха да ме питат ред поред кое какво е

borovaka

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 1
  • -Получени: 48
  • Публикации: 906
Re: Обяснение на задача написана на С++
« Отговор #28 -: 15 Януари 2011, 23:35:54 »
Ами то това е научи синтаксиса горе-долу на основните неща if/else, for, while, cin, cout и ще можеш да ги обясниш.
От там нататък трябва да знаеш какво е структура. Принципно това е дефиниране на твой тип. Както има тип int ( целочислен), double/float и т.н. ти можеш да си дефинираш тип примерно test. В него описваш членовете в смисъл какви данни съдържа този ти. Примерно структурата plod може да съдържа данните ime и cvqt. Това нещо програмно изглежда така:

Код: C++
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. struct plod {
  6. string cvqt;
  7. string ime;
  8. };
  9.  
  10. int main () {
  11.  
  12.         plod portokal;
  13.         portokal.ime = "Portokal";
  14.         portokal.cvqt = "oranjev";
  15.         cout << portokal.ime << " " << portokal.cvqt << endl;
  16. }
  17.  
Забележи как се декларира самата структура от данни. Тази декларация описва самия тип ( абстрактно описване на дадено нещо). От там нататък в main функцията вече декларираш променливата portokal която е от тип plod и съдържа данните ime и cvqt ( обърни внимание как се обръщаш към членовете на променливата от типа на структурата).
А това, че е абстрактен означава, че би могла да си създадеш още една променлива от същия тип примерно limon и да зададеш ime и cvqt за нея. В резултат на това ще имаш две променливи ( portokal и limon ) от типа на структурата която си декларирала ( plod) които ще имат напълно различни една от друга данни ( cvqt и ime).
Някой може да кажат, че обяснението което ти дадох е по-подходящо за клас ама то в c++ си е идентично.
Другото което трябва да знаеш са указателите ( звездичките пред името на типа). Тук нещата са малко по-сложни за разбиране и обяснение ...
Общо взето указателят е променлива която сочи към даден тип. Примерно int* p; означава, че променливата p е указател към целочислен тип ( ще заема 4 байта в паметта) и нищо друго не се знае. След това можеш да инициализираш този указател да сочи към дадена променлива от дадения тип. Примерно следната програмка:
Код: C++
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main (){
  5. int* p;
  6. int a;
  7. p = &a;
  8. a = 10;
  9. cout << a << endl;
  10. p = 100;
  11. cout << a << endl;
  12. return 0;
  13.  
  14. }
  15.  
Ако я изпълниш тази програма ще забележиш, че въпреки, че си задала стойността 10 на променливата a, а 100 на променливата p, при втория cout ще се изведе стойността на а 100.
Това е така защото с инициализацията p=&a; ти задаваш, че p сочи към адреса в паметта където е разположена а ( & преди а значи, че присвояваш адреса а не стойността на самата променлива). От тук вече всички стойности които присвояваш на p се присвояват на а, докато не преместиш указателя да сочи към друга променлива или не му зададеш стойност null.
Може да ти се стори объркващо но е полезно в доста ситуации ( можеш да обхождаш масиви, и др. или както в твоя случай tree_node* left; и tree_node* right; са указатели към левия и десния клон на двоичното дърво. Типът към който сочи указателят е структурата tree_node.

Ами това е в общи линии. Смятам, че ако научиш това и се запознаеш с теорията на двоичните дървета, ще те пуснат на изпита без проблеми. Може да не изкараш 6 ама поне ще го вземеш.

Ако не си разбрала нещо питай. Аз не съм от най-компетентните (се пак съм студент първи курс ... къде съм под-тебе :) ) ама ще се намери някой да помогне.
Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

delqnka

  • Newbie
  • *
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 16
Re: Обяснение на задача написана на С++
« Отговор #29 -: 16 Януари 2011, 10:21:46 »
много благодаря на всички за разясненията