PDA

Показать полную графическую версию : Помогите с блок-схемой


rscream
11-12-2011, 21:34
Здравствуйте, очень нужна помощь, в блок-схемой. Программа уже написана. Суть программы: написать базу данных, и чтоб можно было её редактировать, сортировать и тд.
Проблема с блок схемой как рас в функции сортировке
Вот текст самой функции
DREVO *aadd_der (MUZZ s)
{
DREVO *pk;
VET *pv;
pk = new DREVO;
pv = new VET;
if (pk==NULL||pv==NULL)
{
cerr<<"error \n";
exit(1);
}
strcpy(pk->formf,s.formf);
pk->adk=NULL;
pk->adv=pv;

strcpy(pv->firm, s.firm);
strcpy(pv->countre, s.countre);
strcpy(pv->mat, s.mat);
pv->price=s.price;
pv->nomer=s.nomer;
pv->avv=NULL;
return pk;
}

//===============
DREVO * sozdrevo()
{
MUZZ z;
ifstream fr ("MUZZ.txt", ios::in);


if(!fr)
{
cerr<<"error \n";
exit(1);
}
DREVO *nk, *pk, *tk;
VET *pv, *rv;
int flag;
nk=NULL;

while(fr)
{
fr>>z;
if(strlen(z.firm)<=0)
break; // непонятно что должен делать break, после него нужно в начало while идти или куда?
if(nk==NULL)
{
nk=aadd_der(z);
pk=nk;
}
else
{
tk=nk;
flag=0;

while(tk)
if(strcmp(z.formf,tk->formf)==0)
{
flag=1;
break;
}

else
tk=tk->adk;

if(flag==0)
{
pk->adk=aadd_der(z);
pk=pk->adk;
}
else
{
pv=tk->adv;
while (pv->avv!=NULL)
pv=pv->avv;
rv=new VET;

if(rv==NULL)
{
cerr<<"error \n";
exit(1); }
strcpy(rv->firm,z.firm);
strcpy(rv->countre,z.countre);
strcpy(rv->mat,z.mat);
rv->price=z.price;
rv->nomer=z.nomer;
rv->avv=NULL;
pv->avv=rv;
}
}
}
fr.close();
return(nk);
}

//===================
void outdrevo (DREVO *nk)
{
VET *pv;
if(nk==NULL)
{
cout<<"Древо пустое \n";
return;
}

while(nk)
{
cout<<"spisok firm po forme \n: "<< nk->formf<<endl;
pv=nk->adv;
cout<<"_____________________________________________\n";
cout<<"| FIRMA | Countre | Material | -Price- | -Nomer- |\n";
cout<<"|____________________________________________|\n";

while(pv)
{
cout<<"|"<<setw(FIRM)<<pv->firm<<"|"<<
setw(COUNTRE)<<pv->countre<<"|"<<
setw(MAT)<<pv->mat<<"|"<<
setw(5)<<pv->nomer<<"|"<<
setw(5)<<pv->price<<"|\n";
pv=pv->avv;
}
cout<<"|___________________________________________________|\n";
cout<<"prodolgenie - enter \n";
cin.seekg(0L,ios::end);
cin.get();
nk=nk->adk;
} }


Всё что у меня пока получилось в прикреплённом .doc файле

В общем у меня проблема в понимании операторов while, if, когда они когда их много подряд начинаю путаться, что куда. С оператором break тож не всё понятно в итоге.
Буду рад любой подсказке.

lxa85
11-12-2011, 23:56
rscream, говорю честно - копаться в твоем некомментированном коде - откровенно лень. Многа букаф.
Блок схему пишешь русскими словами(подчеркиваю) по сути решения (тоже подчеркиваю).
Т.е. пишешь как: по русски, описываешь что: суть.
Вся остальная муть типа циклы и условные переходы, до тех пор, пока ты не поймешь ихнего назначения никому не интересны.
Судя по комментарию "// непонятно что должен делать break, после него нужно в начало while идти или куда?" принцип работы алгоритма тебе не ясен.
Возьми путный редактор Notepad++ в крайнем случае. Он позволит расставить тебе табуляцию, подсветить парные скобки, "свернуть" функции.
Кстати удобная вещь. Суть работы мне уже ясна.И в чем проблема?
Смотри на вещи чуть более глобально. Например "проверка данных" и выдача ошибки в случае чего.
Сортировку я пока не увидел, в основном из-за названий типа tk, z, nk, pk и т.д. - что это вообще все означает?! Что за бред в названиях переменных?
Итого: В word'е я рисовать категорически отказываюсь. В лучшем случае блок схема от руки в со сканированием
Никаких операторов и конструкций языка программирования в блок-схеме быть не должно. Блок-схема должна пояснять суть работы алгоритма, а не быть его повторением. Т.е. Блок-схема ---> алгоритм. Только так.




© OSzone.net 2001-2012