Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Помогите с блок-схемой (http://forum.oszone.net/showthread.php?t=222669)

rscream 11-12-2011 21:34 1813441

Помогите с блок-схемой
 
Вложений: 1
Здравствуйте, очень нужна помощь, в блок-схемой. Программа уже написана. Суть программы: написать базу данных, и чтоб можно было её редактировать, сортировать и тд.
Проблема с блок схемой как рас в функции сортировке
Вот текст самой функции
Код:

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 1813538

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


Время: 18:42.

Время: 18:42.
© OSzone.net 2001-