singlepost

помогите пожалуйста С++ << На главную или назад  

Англо-русский словарь построен в виде вдоичного дерева.
Каждая компонента содержит английское слово, соответствующее ему русское слово и счетчик количества обращений к данной компоненте.
Первоначально дерево формируется в порядке английского алфавита. В процессе эксплуатации словаря при каждом обращении к компоненте к счетчику обращений прибавляется единица.
Написать программу, которая:
1) обеспечивает начальный ввод словаря с конкретными значениями счетчика обращений;
2) формирует новое представление словаря в виде двоичного дерева по следующему алгоритму:
а) в старом словаре ищется компонента с наибольшим значением счетчика обращений;
б) найденная компонента заносится в новый словарь и удаляется из старого;
в) переход к пункту а) до исчерпания исходного словаря.
3) Производит вывод исходного и нового словарей.
Программа должна обеспечивать диалог с помощью меню и кантроль ошибок при вводе.

Попыталась еёрешить и вот во что это вылилось…
Код программы:
line.h
struct Node
{
char English[20];
char Russian[20];
int K;
Node* left;
Node* right;
};
Node* first(char* Eng,char* rus,int);
Node* search_insert(Node* root,char* Eng,char* rus,int);
void print_tree(Node*,int lev);

line.cpp
#include "line.h"
#include <iostream>
using namespace std;
Node* first(char* Eng,char* rus, int k)
{
Node* pv=new Node;
strcpy(pv->English,Eng);
pv->English[strlen(Eng)+1]='\0';
strcpy (pv->Russian,rus);
pv->Russian[strlen(rus)+1]='\0';
pv->K=k;
pv->left=0;
pv->right=0;
return pv;
}
Node* search_insert(Node* root,char* word,char*rus,int k)
{
Node* pv=root;
Node* prev;
bool flag=false;
while(pv&&!flag)
{
prev=pv;
if(word==pv->English)flag=true;
else if(pv->K<prev->K)pv=pv->left;
else pv=pv->right;
}
if(flag) return pv;
Node* pnew=new Node;
strcpy(pnew->English,word);
pnew->English[strlen(word)+1]='\0';
strcpy(pnew->Russian,rus);
pnew->Russian[strlen(rus)+1]='\0';
pnew->K=k;
pnew->left=0;
pnew->right=0;
if(pnew->K<prev->K)
prev->left=pnew;
else prev->right=pnew;
return pnew;
}
void print_tree(Node* root,int level)
{
if(root)
{
print_tree(root->left,level+1);
for(int i=0;i<level;i++) cout<<"";
cout<<root->English<<endl;
cout<<root->Russian<<endl;
cout<<root->K<<endl;
print_tree(root->right,level+1);
}
}

main.cpp
#include<iostream>
#include<conio.h>
#include"line.h"
#include<windows.h>
using namespace std;
char* Rus (const char*);
void main()
{
int i,K;
char text1[20];
char text2[20];
Node *root,*root1;

for(i=1;i<=5;i++)
{
cout<<Rus("Введите английские слова:");
cin>>text1;
cout<<Rus("Введите русские слова:");
cin>>text2;
cout<<Rus("Введите количество обращений:");
cin>>K;
if(i==1) root=first(text1,text2,K);
else search_insert(root,text1,text2,K);
}
print_tree(root,0);

getch ();
}
char Bufrus[256];

char* Rus(const char* text)
{
CharToOemA(text,Bufrus);
return Bufrus;
}

смогла только вывести дерево ….. дальше вообще запуталась!!!!
ПОМОГИТЕ

29 ответов в теме “помогите пожалуйста С++”

  1. 19
    Олька Солныфко ответил:

    эх….профессия у меня такая…
    я знаю что смогу…..вот и все!

  2. 18
    Алексей Злобин ответил:

    Как это никуда не дется? Подходишь к декану и цитируешь меня. И в тот-же день становишься свободным человеком, которому не надо ни знать C++, ни что такое бинарное дерево.

  3. 17
    Олька Солныфко ответил:

    то что уже3 курс… и не куда не дется

  4. 16
    Алексей Злобин ответил:

    #11 интересно, что мешает?

  5. 15
    Пашка Джиоев ответил:

    Хотя похоже, что у тебя дерево вообще не строится неправильно, т.к. в search_insert написано
    prev=pv;
    if(word==pv->English)flag=true;
    else if(pv->K<prev->K)pv=pv->left; // вот тут prev == pv
    else pv=pv->right;

  6. 14
    Олька Солныфко ответил:

    короче..забили!!
    всем спс…

  7. 13
    Олька Солныфко ответил:

    народ….я это то сделала с трудом….мне препод разрешил еще сней помучиться….потому что так все правильно…
    но вдруг, до менй еще что дойдет, а у меня голова вообще не вариТ!!!!

  8. 12
    Пашка Джиоев ответил:

    Я (или ты) не совсем понял задание, во-первых написано, что "Первоначально дерево формируется в порядке английского алфавита", а у тебя дерево строится в порядке счетчика обращений. По-моему это не правильно.

  9. 11
    Алексей Злобин ответил:

    Солныфко, а может ну его нах этот С++? :) )

  10. 10
    Олька Солныфко ответил:

    ох….Алексей, я бы с удоволствием…но не могу!

  11. 9
    Василий Горбатков ответил:

    а может из xml файла лучше читать словарик, ато тестирование напряжное будет

  12. 8
    Василий Горбатков ответил:

    =)

  13. 7
    Олька Солныфко ответил:

    где отступы сделать??!
    везде?!
    я не догоняю…

  14. 6
    Пашка Джиоев ответил:

    Я же с отступами просил

  15. 5
    Олька Солныфко ответил:

    спс..щя так и сделаю

  16. 4
    Олька Солныфко ответил:

    //pastie.org/697549

  17. 3
    Пашка Джиоев ответил:

    Просто вставь в окошеко код, который ты вставила сюда(только с отступами), выбери язык C++, и нажми paste. А сюда выложи ссылку на получившуюся страницу.

  18. 2
    Пашка Джиоев ответил:

    Если не сложно, можеш выложить исходники, например на //pastie.org/ , а то здесь они совсем нечитаемые.

  19. 1
    Олька Солныфко ответил:

    не поняла…это как??!
    до такого я еще не доросла((!

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.