Премини към съдържанието

Препоръчан отговор


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

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

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

  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
на 11/28/2016 в 21:50, ined написа:

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

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

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

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

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

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

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

  • Горещи теми в момента

  • Подобни теми

    • от Alexandar Jelev
      Здравейте, искам  да попитам някой може ли да ми помогне за курсовата задача, ще му бъда изключително благодарен? :)
      Задачата е следната:
      Съставете програма с функции за:
      а) Въвеждане от клавиатура във файл и в масив ( чрез добавяне) данни за автобусни превози ( до 35 ) - Автогара Варна: маршрут, дата (1 до 31), номер на автобуса, фамилия на водача, брой пътници, цена на съответните билети, обща сума на билетите - през месец юли. Извеждане текущото съдържание на масива (файла) на екран;
      б) Извеждане на екран справка за всички превози през избран ден от месеца ( със запитване за нова справка);
      в) Извеждане на екран номерата на автобусите и общата сума на билетите от превозите, извършени с тях, подредени в низходящ ред по сумата.
                   Главна функция main() -с меню  за избор на функции и проврка за състоянието на данните.  Използване на функции с предаване на параметри.
       
    • от Plamy Gerova
      Здравейте, може ли помощ за курсовата ми задача?
      съставете програма с функции за:
      а) въвеждане от клавиатурата във файл и в масив( чрез добавяне) данни за морски пътувания (до 25)- Морска гара Варна: маршрут, кораб-име, име на капитан, цени на билетите- I,II класа, брой пасажери в съответната класа, обща сума на продадените билети- през избран месец от годината.Извеждане текущото съдържание на масива(файла) на екрана.
      б) извеждане на екран данните за превозите на кораб по въведено от клавиатурата име на кораб(със запитване за справка)
      в) извеждане на екран данните за морско пътуване с най- голяма обща сума на продадени билети.
      Главна функция main()- с меня за избор на функции и проверка за състоянието та данните.Използване на локални променливи и функции с предаване на параметри. 
       
    • от Десислава Нешева
      Здравейте на всички. Имам въпрос, свързан с програмата си++. Имам матрица, на която търся сума от отрицателните елементи. Въпроса ми е как ще стане това нещо да се запише във файл, искам резултата да се показва само във файла, а не цялата матрица. Ето моя код:

      #include <iostream>

      #include<fstream>

      int main()

      {

      int a[10][10],m,n;

      int sum=0;

      std::cout<<"rows= ";

      std::cin>>m;

      std::cout<<"cols= ";

      std::cin>>n;

      for (int i=0; i<m; i++)

      for (int j=0; j<n; j++)

      {

      std::cout<<"a["<<i<<"]["<<j<<"]= ";

      std::cin>>a[j];

          if(a[j]<0) sum=sum+a[j];

      std::cout<<"sum= "<<sum;}

      return 0;

      }

      Благодаря, предварително !!!
    • от Boqn Tzonev
      #include <iostream> #include <iomanip> #include <string> #include <fstream> using namespace std; const int N = 5; struct player { string ime; string familia; string otbor; int nomer; int vk_golove; } igrachi[N], podredba; // Prototypes. int add_player(player a[]); void search_by_number(player a[], int &nomer_na_igracha); void search_by_team(player a[], string & ime_na_otbora); void klasirane(player a[]); void actual(player a[], int &nomer_na_igracha, string & ime_na_otbora); //********************************************** fstream igrachi_file; //********************************************** int add_player(player a[]) { int br; igrachi_file.open("igrachi.txt", ios::out | ios::app); // <--- As an "fstream" this needs to know if it is input or output. do { //cout << "\n Broi igrachi:"; cout << "\n Number of players:"; cin >> br; } while (br <= 0 || br > N); if (igrachi_file.fail()) { cout << "Error. The file is missing."; exit(1); } for (int i = 0; i < br; i++) { //cout << "Vuvedi ime na igrach:"; cout << " Enter player's first name: "; cin >> a[i].ime; igrachi_file << a[i].ime << endl; //cout << "Vuvedi familia na igrach:"; cout << " Enter a player's last name :"; cin >> a[i].familia; igrachi_file << a[i].familia << endl; //cout << "Vuvedi otbor na igracha:"; cout << " Enter a player's team: "; cin >> a[i].otbor; igrachi_file << a[i].otbor << endl; //cout << "Vuvedi nomer na igracha:"; cout << " Enter the player number: "; cin >> a[i].nomer; if (a[i].nomer > 99 || a[i].nomer < 1) { do { //cout << "Vuvedete nomer ot 1 do 99. \n"; cout << "Enter number 1 to 99. \n"; cin >> a[i].nomer; } while (a[i].nomer > 99 || a[i].nomer < 1); } igrachi_file << a[i].nomer << endl; //cout << "Vuvedi vkarani golove na igracha:"; cout << " Enter player goals scored: "; cin >> a[i].vk_golove; if (a[i].vk_golove < 0) { do { //cout << "Vuvedete golove >= 0 \n"; cout << "Enter goals >= 0 \n"; cin >> a[i].vk_golove; } while (a[i].vk_golove < 0); } igrachi_file << a[i].vk_golove << endl; } igrachi_file.close(); } void search_by_number(player a[], int &nomer_na_igracha) { int flag = 0; igrachi_file.open("igrachi.txt", ios::in); igrachi_file.seekg(0); if (igrachi_file.fail()) { cout << "Fail to open the file"; exit(1); } for (int i = 0; i < N; i++) { igrachi_file >> a[i].ime; igrachi_file >> a[i].familia; igrachi_file >> a[i].otbor; igrachi_file >> a[i].nomer; igrachi_file >> a[i].vk_golove; if (nomer_na_igracha == a[i].nomer) { cout << "Igrach: " << a[i].ime << " " << a[i].familia << "\nOtbor: " << a[i].otbor << "\nNomer: " << a[i]. nomer << "\nVkarani golove: " << a[i].vk_golove << endl; flag++; } } if (!flag) cout << endl << "Nqma takuv igrach!" << endl; igrachi_file.close(); } void search_by_team(player a[], string & ime_na_otbora) { int flag = 0; igrachi_file.open("igrachi.txt", ios::in); igrachi_file.seekg(0); if (igrachi_file.fail()) { cout << "Fail to open the file"; exit(1); } for (int i = 0; i < N; i++) { igrachi_file >> a[i].ime; igrachi_file >> a[i].familia; igrachi_file >> a[i].otbor; igrachi_file >> a[i].nomer; igrachi_file >> a[i].vk_golove; if (ime_na_otbora == a[i].otbor) { cout << "Igrach: " << a[i].ime << " " << a[i].familia << "\nOtbor: " << a[i].otbor << "\nNomer: " << a[i]. nomer << "\nVkarani golove: " << a[i].vk_golove << endl << endl; flag++; } } if (!flag) cout << endl << "Nqma takuv otbor!" << endl; igrachi_file.close(); } void klasirane(player a[]) { igrachi_file.open("igrachi.txt", ios::in); igrachi_file.seekg(0); // <--- Not needed as the file pointer is already at the beginning from the open statement. for (int i = 0; i < N; i++) { igrachi_file >> a[i].ime; igrachi_file >> a[i].familia; igrachi_file >> a[i].otbor; igrachi_file >> a[i].nomer; igrachi_file >> a[i].vk_golove; } cout << "ime" << setw(15) << "familia" << setw(15) << "otbor" << setw(15) << "nomer" << setw(15) << "vkarani golove" << endl; for (int i = 0; i < N; i++) { cout << a[i].ime << right << setw(15) << a[i]. familia << right << setw(15) << a[i]. otbor << right << setw(15) << a[i]. nomer << right << setw(15) << a[i].vk_golove << endl; } igrachi_file.close(); } int main() { int choice; int nomer_na_igracha; string ime_na_otbora, familia_na_igracha; player a[N]; do { cout << "\n================================================================================" << endl; cout << "\t\tMenu\n\n"; //cout << "= Izberete:\n"; cout << " Choose:\n"; //cout << "= 1. Dobavqne na igrachi\n"; cout << " 1. Add players\n"; //cout << "= 2. Spisuk s igrachite\n"; cout << " 2. List of players\n"; //cout << "= 3. Spravka za igrach po nomer\n"; cout << " 3. Reference for player by number\n"; //cout << "= 4. Spravka za igrach po otbor\n"; cout << " 4. Player report by team\n"; //cout << "= 5. Aktualizirane\n"; cout << " 5. Update\n"; //cout << "= 6. Krai\n"; cout << " 6. End\n"; cout << "\n================================================================================" << endl; cin >> choice; switch (choice) { case 1: { add_player(a); break; } case 2: { klasirane(a); break; } case 3: { cout << "Tursene po nomer: "; cin >> nomer_na_igracha; search_by_number(a, nomer_na_igracha); break; } case 4: { cout << "Tursene po otbor: "; cin >> ime_na_otbora; search_by_team(a, ime_na_otbora); break; } case 5: { cout<< "Update:"; cin>> nomer_na_igracha, ime_na_otbora; } break; } } while (choice != 6); } Здравейте имам нужда от малко помощ с моята курсова задача.Остана ми да направя единствено актуализацията ,но не мога да се справя. Ето и какво съм направил по актуализацията.Ще го постна като отговор долу.

      void actual(player a[], int nomer_na_igracha, string ime_na_otbora) { int i{}; fstream igrachi_file; igrachi_file.open("igrachi.txt", ios::in); while (getline(igrachi_file, a[i].familia)) // <--- Changed. { igrachi_file >> a[i].vk_golove; igrachi_file.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // <--- Requires header file <limits>. getline(igrachi_file, a[i].otbor); i++; } igrachi_file.close(); //cout << "Vuvedete igrachite chiqto informaciq iskate da redaktirate: "; cout << "Enter the players whose information you want to edit: "; //cin >> num; // <--- Not defined or used. //cout << "\n Ime: "; cout << "\n Name: "; std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // <--- Requires header file <limits>. getline(cin, a[i].familia); //cout << "\n Golove: "; cout << "\n Goals: "; cin >> a[i].vk_golove; // <--- goals. cin.get(); cout << endl << endl; } Кодът не е правилен.Да се види до къде съм стигнал.
  • Дарение

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.