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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Списък C++

Featured Replies

Здравейте, задачата ми е да съставя функция, която намира най‐често срещания елемент и колко пъти той се среща в списък с начален указател pstart. Направила съм функция за търсене,но тя е за намиране на конкретен елемент.Съвети?

#include <iostream>

using namespace std;
struct elem
{
    int key;
    elem* next;
}*pstart = NULL;
void add(int n)
{
    elem* p = pstart;
    pstart = new elem;
    pstart->key = n;
    pstart->next = p;
}
void izvedi()
{
    if (pstart)
    {
        elem* p = pstart;
        cout << "Spisukut e " << endl;
        while (p)
        {
            cout << p->key << "  ";
            p = p->next;
        }
    }
    else
        cout << "\n Prazen spisuk";
}
void search(int  n)
{
    elem* p = pstart;
    if (pstart)
    {
        while ((p->key != n) && (p->next))
            p = p->next;
        if (p->key == n)
            cout << "\nTurseniq element e nameren";
        else
            cout << "\nElementut ne e nameren";
    }
    else
        cout << "Spisukut e prazen";
}

void element()
{
    int num;
    do {
        cout << "Vuvedi element ";
        cin >> num;
        add(num);
    } while (num != 0);
    izvedi();
    cout << "\nVuvedi stoinost,koqto iskash da potursish?";
    int n1;
    cin >> n1;
    search(n1);

}

int main()
{
   
    int izbor;
    char izborDrOp;

    system("cls"); // изчистване на екрана-
    do { //Цикъл за менюто
        do {
            cout << endl << "\n\t\t\t ****************** M E N U ******************\n" << endl //извеждаме на екрана
                << "\n\t\t\t 1.Izvejdane na stojnost: \n" << endl //извеждаме на екрана
                << "\n\t\t\t 2.Tarsene na element:  \n" << endl //извеждаме на екрана
                << "\n\t\t\t 3.Izvejdane na elemen': \n" << endl //извеждаме на екрана
                << "\n\t\t\t *******************************************************" << endl //извеждаме на екрана
                << "\n\t\t\t Вашият избор:" << ""; //извеждаме на екрана
            cin >> izbor; // Въвеждане на число от масива
        } while (!(izbor > 0 && izbor < 3)); // докато 'izbor' е от 1 до 10

        switch (izbor)
        {
        case 1:system("color F1");
        {
            system("cls"); // изчистване на екрана
            element();
        }
        break;
        case 2:system("color F5");
        {system("cls"); // изчистване на екрана
        int n;
        search(n);
        }
        break;
        case 3:system("color FA");
        {system("cls"); 
        izvedi();

        }break;
        }


        cout << "Друга операция ? (y/n)";
        cin >> izborDrOp;
    } while (izborDrOp == 'y' || izborDrOp == 'n');
    return 0;
    //system("pause");
}

 

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

С елемнтарно търсене в гугъл се намира:

https://www.geeksforgeeks.org/frequent-element-array/

int maxlist(int &cmax)
{
    elem *p, *t=pstart;
    int n,nmax,c;
    cmax=0;
    while (t)
    {
        n=t->key;
        c=1;
        p=t->next;
        while (p)
        {
            if (p->key==n) ++c;
            p=p->next;
        }
        if (c>cmax)
        {
             nmax=n;
             cmax=c;
        }
        t=t->next;
    }
    return nmax;
}

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

Списъка или предварително го проверяваш дали е празен или след функцията дали броя е 0 и извеждаш подходящо съобщение, че списъка е празен.

  • Автор
преди 1 час, ined написа:

int maxlist(int &cmax)
{
    elem *p, *t=pstart;
    int n,nmax,c;
    cmax=0;
    while (t)
    {
        n=t->key;
        c=1;
        p=t->next;
        while (p)
        {
            if (p->key==n) ++c;
            p=p->next;
        }
        if (c>cmax)
        {
             nmax=n;
             cmax=c;
        }
        t=t->next;
    }
    return nmax;
}

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

Благодаря! Но функцията ми element() не ми позволява да напиша коя стойност искам да търся

 

Цитат

Благодаря! Но функцията ми element() не ми позволява да напиша коя стойност искам да търся

И какво общо имат едната с другата функция?

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

 

do {
        cout << "Vuvedi element ";
        cin >> num;
        add(num);
    } while (num != 0);

 

за да не ти добавя нулата в списъка би трябвало да бъде нещо от рода на:

 

    while (1)
    {
        cout << "Vuvedi element ";
        cin >> num;
        if (num==0) break;
        add(num);
    } 

 

 

 

 

 

 

 

  • Автор
преди 30 минути, ined написа:

И какво общо имат едната с другата функция?

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

 


do {
        cout << "Vuvedi element ";
        cin >> num;
        add(num);
    } while (num != 0);

 

за да не ти добавя нулата в списъка би трябвало да бъде нещо от рода на:

 


    while (1)
    {
        cout << "Vuvedi element ";
        cin >> num;
        if (num==0) break;
        add(num);
    } 

 

 

 

 

 

 

 

Извинявам се, но пак не ми дава да въведа стойоността която да потърся.

Слагаш по-няколко неща да прави една функция, затова пък в менюто липсват необходимите инструкции.

поизчистил съм я програмата, element() само добавя един или повече елементи към списъка и не прави нищо друго. Останалата логика е в менюто, така по-лесно да се организира какво да се прави по всяка точка.

#include <iostream>

using namespace std;

struct elem
{
    int key;
    elem* next;
}*pstart = NULL;
void add(int n)
{
    elem* p = pstart;
    pstart = new elem;
    pstart->key = n;
    pstart->next = p;
}
void izvedi()
{
    if (pstart)
    {
        elem* p = pstart;
        cout << "Spisukut e " << endl;
        while (p)
        {
            cout << p->key << "  ";
            p = p->next;
        }
    }
    else
        cout << "\n Prazen spisuk";
}
void search(int  n)
{
    elem* p = pstart;
    if (pstart)
    {
        while ((p->key != n) && (p->next))
            p = p->next;
        if (p->key == n)
            cout << "\nTurseniq element e nameren";
        else
            cout << "\nElementut ne e nameren";
    }
    else
        cout << "Spisukut e prazen";
}

void element()
{
    int num;
    while(1)
    {
        cout << "Vuvedi element ";
        cin >> num;
        if (num==0) return;
        add(num);
    } 
}

int main()
{
   
    int izbor;
    char izborDrOp;

    system("cls"); 
    do { 
        do {
            cout << endl << "\n\t\t\t ****************** M E N U ******************\n" << endl 
                << "\n\t\t\t 1.Vavejdane na element(i): \n" << endl 
                << "\n\t\t\t 2.Tarsene na element:  \n" << endl 
                << "\n\t\t\t 3.Izvejdane na elementi': \n" << endl 
                << "\n\t\t\t *******************************************************" << endl 
                << "\n\t\t\t Vashia izbor:" << ""; 
            cin >> izbor; 
        } while (!(izbor > 0 && izbor < 4)); 
        switch (izbor)
        {
        case 1:system("color F1");
        {
            system("cls"); 
            element();
            izvedi();
        }
        break;
        case 2:system("color F5");
        {system("cls"); 
        cout << "\nVuvedi stoinost,koqto iskash da potursish?";
        int n1;
        cin >> n1;
        search(n1);
        }
        break;
        case 3:system("color FA");
        {system("cls"); 
        izvedi();

        }break;
        }


        cout << "\n\nDruga operacia ? (y/n)";
        cin >> izborDrOp;
    } while (izborDrOp == 'y' || izborDrOp == 'Y');
}

 

  • Автор
преди 19 часа, ined написа:

Слагаш по-няколко неща да прави една функция, затова пък в менюто липсват необходимите инструкции.

поизчистил съм я програмата, element() само добавя един или повече елементи към списъка и не прави нищо друго. Останалата логика е в менюто, така по-лесно да се организира какво да се прави по всяка точка.


#include <iostream>

using namespace std;

struct elem
{
    int key;
    elem* next;
}*pstart = NULL;
void add(int n)
{
    elem* p = pstart;
    pstart = new elem;
    pstart->key = n;
    pstart->next = p;
}
void izvedi()
{
    if (pstart)
    {
        elem* p = pstart;
        cout << "Spisukut e " << endl;
        while (p)
        {
            cout << p->key << "  ";
            p = p->next;
        }
    }
    else
        cout << "\n Prazen spisuk";
}
void search(int  n)
{
    elem* p = pstart;
    if (pstart)
    {
        while ((p->key != n) && (p->next))
            p = p->next;
        if (p->key == n)
            cout << "\nTurseniq element e nameren";
        else
            cout << "\nElementut ne e nameren";
    }
    else
        cout << "Spisukut e prazen";
}

void element()
{
    int num;
    while(1)
    {
        cout << "Vuvedi element ";
        cin >> num;
        if (num==0) return;
        add(num);
    } 
}

int main()
{
   
    int izbor;
    char izborDrOp;

    system("cls"); 
    do { 
        do {
            cout << endl << "\n\t\t\t ****************** M E N U ******************\n" << endl 
                << "\n\t\t\t 1.Vavejdane na element(i): \n" << endl 
                << "\n\t\t\t 2.Tarsene na element:  \n" << endl 
                << "\n\t\t\t 3.Izvejdane na elementi': \n" << endl 
                << "\n\t\t\t *******************************************************" << endl 
                << "\n\t\t\t Vashia izbor:" << ""; 
            cin >> izbor; 
        } while (!(izbor > 0 && izbor < 4)); 
        switch (izbor)
        {
        case 1:system("color F1");
        {
            system("cls"); 
            element();
            izvedi();
        }
        break;
        case 2:system("color F5");
        {system("cls"); 
        cout << "\nVuvedi stoinost,koqto iskash da potursish?";
        int n1;
        cin >> n1;
        search(n1);
        }
        break;
        case 3:system("color FA");
        {system("cls"); 
        izvedi();

        }break;
        }


        cout << "\n\nDruga operacia ? (y/n)";
        cin >> izborDrOp;
    } while (izborDrOp == 'y' || izborDrOp == 'Y');
}

 

а функцията maxlist() не си я добавил нали?

#include <iostream>

using namespace std;

struct elem
{
    int key;
    elem* next;
}*pstart = NULL;
void add(int n)
{
    elem* p = pstart;
    pstart = new elem;
    pstart->key = n;
    pstart->next = p;
}

int maxlist(int &cmax)
{
    elem *p, *t=pstart;
    int n,nmax,c;
    cmax=0;
    while (t)
    {
        n=t->key;
        c=1;
        p=t->next;
        while (p)
        {
            if (p->key==n) ++c;
            p=p->next;
        }
        if (c>cmax)
        {
             nmax=n;
             cmax=c;
        }
        t=t->next;
    }
    return nmax;
}

void izvedi()
{
    if (pstart)
    {
        elem* p = pstart;
        int num,x;
        cout << "Spisukut e " << endl;
        while (p)
        {
            cout << p->key << "  ";
            p = p->next;
        }
        num=maxlist(x);
        cout<<"\n\nNaj-chesto sreshtan element "<<num<<" x"<<x<<endl;
    }
    else
        cout << "\n Prazen spisuk";
}
void search(int  n)
{
    elem* p = pstart;
    if (pstart)
    {
        while ((p->key != n) && (p->next))
            p = p->next;
        if (p->key == n)
            cout << "\nTurseniq element e nameren";
        else
            cout << "\nElementut ne e nameren";
    }
    else
        cout << "Spisukut e prazen";
}

void element()
{
    int num;
    while(1)
    {
        cout << "Vuvedi element ";
        cin >> num;
        if (num==0) return;
        add(num);
    } 
}

int main()
{
   
    int izbor;
    char izborDrOp;

    system("cls"); 
    do { 
        do {
            cout << endl << "\n\t\t\t ****************** M E N U ******************\n" << endl 
                << "\n\t\t\t 1.Vavejdane na element(i): \n" << endl 
                << "\n\t\t\t 2.Tarsene na element:  \n" << endl 
                << "\n\t\t\t 3.Izvejdane na elementi': \n" << endl 
                << "\n\t\t\t *******************************************************" << endl 
                << "\n\t\t\t Vashia izbor:" << ""; 
            cin >> izbor; 
        } while (!(izbor > 0 && izbor < 4)); 
        switch (izbor)
        {
        case 1:system("color F1");
        {
            system("cls"); 
            element();
            izvedi();
        }
        break;
        case 2:system("color F5");
        {system("cls"); 
        cout << "\nVuvedi stoinost,koqto iskash da potursish?";
        int n1;
        cin >> n1;
        search(n1);
        }
        break;
        case 3:system("color FA");
        {system("cls"); 
        izvedi();

        }break;
        }


        cout << "\n\nDruga operacia ? (y/n)";
        cin >> izborDrOp;
    } while (izborDrOp == 'y' || izborDrOp == 'Y');
}

 

преди 4 минути, ined написа:

#include <iostream>

using namespace std;

struct elem
{
    int key;
    elem* next;
}*pstart = NULL;
void add(int n)
{
    elem* p = pstart;
    pstart = new elem;
    pstart->key = n;
    pstart->next = p;
}

int maxlist(int &cmax)
{
    elem *p, *t=pstart;
    int n,nmax,c;
    cmax=0;
    while (t)
    {
        n=t->key;
        c=1;
        p=t->next;
        while (p)
        {
            if (p->key==n) ++c;
            p=p->next;
        }
        if (c>cmax)
        {
             nmax=n;
             cmax=c;
        }
        t=t->next;
    }
    return nmax;
}

void izvedi()
{
    if (pstart)
    {
        elem* p = pstart;
        int num,x;
        cout << "Spisukut e " << endl;
        while (p)
        {
            cout << p->key << "  ";
            p = p->next;
        }
        num=maxlist(x);
        cout<<"\n\nNaj-chesto sreshtan element "<<num<<" x"<<x<<endl;
    }
    else
        cout << "\n Prazen spisuk";
}
void search(int  n)
{
    elem* p = pstart;
    if (pstart)
    {
        while ((p->key != n) && (p->next))
            p = p->next;
        if (p->key == n)
            cout << "\nTurseniq element e nameren";
        else
            cout << "\nElementut ne e nameren";
    }
    else
        cout << "Spisukut e prazen";
}

void element()
{
    int num;
    while(1)
    {
        cout << "Vuvedi element ";
        cin >> num;
        if (num==0) return;
        add(num);
    } 
}

int main()
{
   
    int izbor;
    char izborDrOp;

    system("cls"); 
    do { 
        do {
            cout << endl << "\n\t\t\t ****************** M E N U ******************\n" << endl 
                << "\n\t\t\t 1.Vavejdane na element(i): \n" << endl 
                << "\n\t\t\t 2.Tarsene na element:  \n" << endl 
                << "\n\t\t\t 3.Izvejdane na elementi': \n" << endl 
                << "\n\t\t\t *******************************************************" << endl 
                << "\n\t\t\t Vashia izbor:" << ""; 
            cin >> izbor; 
        } while (!(izbor > 0 && izbor < 4)); 
        switch (izbor)
        {
        case 1:system("color F1");
        {
            system("cls"); 
            element();
            izvedi();
        }
        break;
        case 2:system("color F5");
        {system("cls"); 
        cout << "\nVuvedi stoinost,koqto iskash da potursish?";
        int n1;
        cin >> n1;
        search(n1);
        }
        break;
        case 3:system("color FA");
        {system("cls"); 
        izvedi();

        }break;
        }


        cout << "\n\nDruga operacia ? (y/n)";
        cin >> izborDrOp;
    } while (izborDrOp == 'y' || izborDrOp == 'Y');
}

 

А maxlist() не се изпълнява като се сложи в менюто?

  • 2 седмици по-късно...

Здравейте, моята задача също е от списъци, но има следното условие: Да се състави функция за изваждане на две числа, представени чрез списъци (може и двусвързани). До момента съм написала следния код, но списъците не се извеждат на екран и не се извършва изваждането. Бихте ли ми казали къде греша, тъй като в момента го изучавам и се затруднявам. Ще ви бъда много благодарна, ако ми помогнете. 😊

#include <iostream>

using namespace std;

struct elem {

    int key;

    elem *next;

}

*list1 = NULL, *list2 = NULL, *list3 = NULL;

void add1(int n, elem *start)

{

    elem *p = start;

    start = new elem;

    start ->key = n;

    start ->next = p;

}

void list(elem *start)

{

         elem *p = start;

        cout << "Spisyk:";

        while (p) {

            cout << p->key << "\t";

            p = p->next;

        }

        cout << endl;

}

int main()

{

    int i, j;

    cout << "\n Vyvedete pyrvoto chislo: ";

    do

    {

        cin >> i;

        if (i > 0 && i < 10)

            add1(i, list1);

    } while ((i>=0) && (i<10));

    cout << "\n Vyvedete vtoroto chislo: ";

    do

    {

        cin >> j;

        if (j > 0 && j < 10)

            add1(j, list2);

    } while ((j >= 0) && (j<10));

    elem *p = list1, *q = list2;

    int pr = 0; //Пренос

    int c = 0;

    while ((p != NULL) || (q != NULL))

    {

        c = 0;

        if (p != NULL)

        {

            c -= p->key;

            p = p->next;

        }

        if (q !=NULL)

        {

            c -= q->key;

            q = q->next;

        }

        if (pr > 0)

            c -= pr;

        if (c > 9)

        {

            c -= 10;

            pr = 1;

        }

        else

        pr = 0;

        add1(c, list3);

    }

    if (pr > 0)

        add1(pr, list3);

    list(list3);

}

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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