Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Динамично представен дек

Featured Replies

Здравейте! Имам нужда от помощ за сортиравката на една програма. Тя е следната: 

Да се състави програма, която да съдържа следните функции:

1.Съставяне на динамично представен дек с целочислени данни, съдържащи се във външен файл.

2.Сортиране на елементите в структурата по метода :чрез просто вмъкване ( полуобмен);

3. Търсене на минималния елемент в интервала между максималния и минималния елемент по стойност кратен на 3 и последващото му изтриване от структурата.

4.Запис на изходните резултати във външей файл.

Главна функция main() -с меню за избор на функции и проверка за състоянието на данните.

 

Това е програмата в непълен вид. Ако някой има малко свободно време, моля да я погледне. Благодаря! :)

#include<iostream>
#include<fstream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;

int temp;
int br = 1;
void push_l(int n);
void push_r(int n);
int pop_l(int &n);
int pop_r(int &n);

struct elem                             //структура на дек
{
    int key;                         //съдържа стойността на елемента
    elem *next;          //сочи към следващия елемент                       
} *_left = NULL, *_right = NULL;        //left сочи към краиния ляв елемент,а right сочи към крайния десен
void push_l(int n)              //добавяне на елемент със стойност n
{
    elem *p;                //създаване на указател p от тип elem
    p = _left;                      //p приема стойността на крайния ляв елемент
    _left = new elem;       //създава нов елемент сочен от left
    _left->key = n; //установяване на  n заа стойност на крайния ляв елемент 
    _left->next = p;                //следващия елемент left приема стойността на p
    if (right == NULL)           //ако няма краен десен елемент, то left  става такъв
    {
        _right = _left;
    }
}
void push_r(int n)              //добавяне отдясно на елемент със стойност  n
{
    elem *p;                //създаване на указател  p от тип elem
    p = _right;             //p приема стойността на краиния десен елемент
    _right = new elem;      //създаване на нов елемент сочен от right
    _right->key = n;                //установяване на n за стойнот на крайния десен елемент
    _right->next = NULL;    //следващия елемент right приема NULL
    if (_left == NULL)              //ако няма краен ляв елемент 
    {
        _left = _right;         //крайният ляв приема стйността на крайния
    }
    else                            //десен, в противен случей                      
        p->next = _right;       // следващият елемент райт приема стойността на крайния десен елемент
}
int pop_l(int &n)                       //извличане на елемент отляво
{
    elem *p;                        //създаване на указател p от тип elem
    if (_left)                              //проверка за наличие на краен ляв елемент 
    {
        n = _left->key;             //n приема стойността на крайния ляв елемент
        p = _left;                      //p  сочи крайния елемент
        _left = _left->next;    //left сочи следващият негов елемент
        if (left == NULL)               //ако няма краен ляв елемент
            _right = NULL;          //указателят right се занулява
        delete p;               //изтриване на указателя  p
        return 1;
    }
    else
        return 0;
}
int pop_r(int &n)                       //извличане на елемент отдясно
{
    elem *p;                        //създаване на указател p от тип elem
    if (right)                      //проверка за наличие на краен десен елемент
    {
        n = _right->key;                 //n приема стойността на крайния десен елемент
        if (_left == _right)            //ако крайния десен елемент=крайния ляв
        {
            delete _right;          //изтриване на крайния десен
            _left = _right = NULL;  //нулиране на указателите
        }
        else
        {
            p = _left;                      //p приема стойността на крайния ляв елемент
            while (p->next != _right)       //докато следващия p елемент 
                //е различен от крайния десен
                p = p->next;                    //p преминава на следващия елемент
            n = _right->key;                        //n приема стойността на крайния десен
            p->next = NULL;         //указателят за следващият на  p се нулира
            delete _right;                  //изтриване на крайния десен елемент
            _right = p;                     //крайният десен приема стойността на p
        }
        return 1;
    }
    else
        return 0;
}

void output(ofstream& ostr, int n)              //за запис във файл
{
    ostr << n << endl;
}
void get(int n)                 //достъп до n-тия елемент
{
    int i, t;
    for (i = 1; i<br; i++)  //цикъл за обхождане на дека
    {
        pop_l(t);       //извличане на крайния ляв елемент 
        if (i == n)             //проверка за достигнат n-ти  елемент
        {
            temp = t;       //запомня стойността му
        }
        push_r(t);      //добавяне на извлечения елемент от дясно
    }

}
void set(int n, int d)          //установяване на стойност d на n-тия елемент
{
    int t;
    for (int i = 1; i<br; i++)      //цикъл за обхождане на дека    
    {
        pop_l(t);       //извличане на крайния ляв елемент
        if (i == n)             //проверка за достигане  n-тия елемент
        {
            t = d;  //установяване на новата стойност
        }
        push_r(t);      //добавяне на извлечения елемент отдясно
    }
}
void list()                     //извеждане на елементите на дека
{
    cout << "\n DEK:";
    for (int i = 1; i<br; i++)              //цикъл за обхождане
    {
        get(i);                         //извличане на стойността на съответният елемент
        cout << "\t" << temp;           //извеждане на екран

    }
}

void mergesort(int a[] = 0, int n = 0)//функцията разделя масива рекурсивно на две части//след което функцията merge ги обединява
{
    if (n<2) return;
    int _left = n / 2, _right = n - _left;
    mergesort(a, _left);
    mergesort(a + _left, _right);
    int *p = new int[n];

    for (int i = 0; i<n; i++)
        a = p;
    delete[]p;
}

void search()   //търсене  на най-големия елемент
//кратен на 5 и по-малък от макс кратно число на 7
{
    void mergesort(int a[] = 0, int n = 0);    //сортиране на дека ако не е бил сортиран
    int t = 0;

    for (int i = 1; i<br; i++)      //цикъл за обхождане
    {
        get(i);                 //извличане на ития елемент
        if (temp % 5 == 0)      //проверка за точно делене на 5
            t = temp;               //запомняне на стойността му
    }
    cout << "\n Maksimalen element kraten na 5: " << t << endl;
    cout << "\n Elementi kratni na 7 i po-malkiq ot maksimalniq kraten na 5: " << endl;
    for (int i = 1; i<br; i++)              //цикъл за обхождане
    {
        get(i);                 //извличане на ития елемент
        if (temp % 7 == 0 && temp<t)    //проверка за точно делене на 7 и по-малк от
        {                               //макс кратен на 5
            cout << "\t" << temp;   //извеждане
        }
    }
}
int main()
{
    system("chcp 1251");
    int ch, m;
    do
    {
        cout << "\n\n\t\t MENU" << endl;
        cout << "\n\t1-Zarejdane na DEK ot file" << endl;
        cout << "\t2-Sortirane po metod chrez slivane" << endl;
        cout << "\t3-Elementi kratni na 7 i po-malkiq ot maksimalniq kraten na 5" << endl;
        cout << "\t4-Zapis na DEK vuv file" << endl;
        cout << "\t5-IZHOD!" << endl;
        cout << "\n\t IZBERETE:";
        cin >> m;
        cout << endl;


        switch (m)
        {
        case 1:
        {
                  ifstream ff;
                  ff.open("deck.txt");
                  while (ff)
                  {
                      ff >> ch;
                      if (ch == 0) break;
                      else
                      {
                          push_r(ch);
                          br++;
                      }
                  }
                  list();
                  break;
        }

        case 2:
        {
                  mergesort(int a[] = 0, int n = 0);
                  list();
                  break;
        }
        case 3:
        {
                  search();
                  break;
        }
        case 4:
        {
                  ofstream ff("sorted deck.txt");
                  while (pop_l(ch))
                  {
                      output(ff, ch);
                  }
                  cout << "\n\t *** File saved! ***" << endl;
        }
        }
    } while (m != 5);
}

Цитат

Това е програмата в непълен вид. Ако някой има малко свободно време, моля да я погледне. Благодаря! 

Почвате да ставате нагли, нямам предвид конкретно автора на темата, защото има и доста други такива като него

копират програма отнякъде, която дори не е със същото условие като тяхната задача и някой ако имал време да им я погледнел

http://forums.data.bg/index.php?showtopic=2178982

  • Автор
на 11/28/2016 в 21:50, ined написа:

Почвате да ставате нагли, нямам предвид конкретно автора на темата, защото има и доста други такива като него

копират програма отнякъде, която дори не е със същото условие като тяхната задача и някой ако имал време да им я погледнел

http://forums.data.bg/index.php?showtopic=2178982

Благодаря ти за помоща, оценявам го! :)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.