Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как организовать обращение одной функции к элементам, объявленным в другой фунцкии?

64K
21 марта 2011 года
cherish dkfefbie c
8 / / 19.03.2011
вот такая ситуация


Прочитайте сначала вопрос снизу
Код:
static int Do ( GRAPH G)  
    {


            //----------------------------VARIABLES--------------------------
 
    int i,j;
    int Xstart; // НАЧАЛЬНАЯ ВЕРШИНА
    int    Xend; // КОНЕЧНАЯ ВЕРШИНА
    int    p; //номер кратчайшего пути и наименьшей длины
    unsigned int    flag[16]; // ВЕКТОР, ОПРЕДЕЛЯЮЩИЙ КАКИЕ ВРЕШИНЫ УЖЕ ПОСЧИТАНЫ
                                                             //G.War - Матрица смежности
    int path[50][16]; //записываются вершины составляющие кратчайший путь
    unsigned int L[16]; // здесь длины путей от начальной до каждой

//------------------------------END OF VARIABLES----------------

        for (i=0;i<G.Nu;i++)
            for(j=0;j<G.Nu;j++)
                if(G.War[j]==0) G.War[j]=65535;
        cout<<endl<<"Assign start point"<<endl;
        cin>>Xstart;
        cout<<endl<<"Assign destination point"<<endl;
        cin>>Xend;
        Xstart--;
        Xend--;
        if(Xstart==Xend)
        {
            cout<<endl<<"  Sorry, start and end point is the same"<<endl;
            getchar();
            return 0;
        }
        for(i=0;i<G.Nu;i++)
        {
            flag=0;
            L=65535;
        }
        L[Xstart]=0; //МЕТКА НАЧАЛЬНОЙ ТОЧКИ РАВНА НУЛЮ
        flag[Xstart]=1;
        p=Xstart; // начальная - текущая точка
        for (i=1;i<=G.Nu; i++)
            path=Xstart+1;

        do
        {
            for(i=0;i<G.Nu;i++)
                if ((G.War!=65535)&&(!flag)&&(i!=p))
                {
                    if (L>(L+G.War))
                    {
                        path[i+1]=i+1;
                    }
                    L=minim(L,L+G.War);
                }
            p=min(G.Nu);
            flag=1;
        }
        while (p!=Xend);

        if (L!=65535)

        {
            cout<<endl<<" Shortest path is";
            for (j=0;j<i;j++)
                cout<<" "<<path[p+1][j]<<endl;
            cout<<"Its length is "<<L<<endl;
        }
        else
            cout<<"This way doesnot exist"<<endl;
        getchar();

        return 0;



       // int l;



    }

    unsigned int minim (unsigned int x, unsigned int y)
    {
        if(x<y) return x;
        return y;
    }

     int min (int n)
    {
            int i,result;
            for(i=0;i<n;i++)
                if (!(flag) )  result=i;
            for(i=0;i<n;i++)
                if((L[result]>L)&&(!flag)) result=i;
            return result;

    }





Как организовать обращение последней функции к переменным, объявленным в первой?
И вообще возможно другим для других функций обращаться к элементам данной?
376
21 марта 2011 года
Absolut
220 / / 22.11.2002
Что-то у вас месиво какое-то в коде. Для передачи данных из одной функции в другую используйте параметры (ссылки, указатели - если требуется модификация). Или выносите общие данные на уровень выше. А в "простыню" вашу даже смотреть не охота.
2.1K
22 марта 2011 года
Norgat
452 / / 12.08.2009
Цитата:
Как организовать обращение последней функции к переменным, объявленным в первой?


Глобальные переменные, указатели(тут нужно быть осторожным) или курить ООП.

Цитата:
И вообще возможно другим для других функций обращаться к элементам данной?


Нет(а деже если и можно как-то извратиться в C++, то лучше даже не пытаться, если точно не знать к чему это приведёт).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог