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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Създаване на дек

Featured Replies

Здравейте,

имам малки затруднения със създаването на дек. Условието ми е да се състави програма, която създава дек, съдържащ символи и след това проверява, дали записаната в него дума е палиндром. Написал съм я програмата, но без да използвам дек.

#include<iostream>using namespace std;#include<stdio.h>#include<string.h>int main(){     char sim[20];      int a,b,dyl,sred;     cout<<" Vyvedete niz:";     gets (sim);     dyl=strlen(sim);     sred=dyl;     b=0;     for (a=0;a<sred;a++)     {         if (sim[a]!=sim[dyl-a-1])            b++;     }     cout<<"Nizyt "<<sim;     {         if(b>0)            cout<<" ne e palindrom";         else cout<<" e palindrom";     }}

Редактирано от Spydoc (преглед на промените)

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

Нещо такова:

...char deque[50];const int OFFSET = 25; // средния елемент на масива...//Примерно единия край да работи от deque[OFFSET-1] до >= 0, а другия край да работи от deque[OFFSET+1] до големината на масива(deque.size)

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

Редактирано от RJ45 (преглед на промените)

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

Някак си не ми звучи, като работа с дек.

Здравейте,имам малки затруднения със създаването на дек. Условието ми е да се състави програма, която създава дек, съдържащ символи и след това проверява, дали записаната в него дума е палиндром. Написал съм я програмата, но без да използвам дек.

Ти трябва да създадеш собствен (като структура от данни) дек или да ползваш този от STL?

Някак си не ми звучи, като работа с дек.

А как се работи с дек?

  • Автор

Трябва да създам собствен дек, с използване на функции за push и pop.

ами създай го де. deque е опашка с два края, така че операциите са за двата края: push_front, push_back, pop_front и pop_back.

  • Автор

Edit: Оправих си грешката. Ето го финалния вид на задачата, направена с дек.

#include <iostream>using namespace std;struct elem{    char key;    elem *next;}*l=NULL,*r=NULL;void push_r(char n){   elem *p=r;   r=new elem;   r->key=n;   r->next=NULL;   if (p)        p->next=r;   else l=r;}int pop_l(int &n){    if (l)    {       n=l->key;       elem *p=l;       l=l->next;       delete p;       return 1;    }    else return 0;}int pop_r(int &n){    if (r)    {        n=r->key;        if (l==r)        {            delete r;            l=r=NULL;        }        else        {            elem *p=l;            while (p->next!=r)                p=p->next;                p->next=NULL;                delete r;                r=p;        }        return 1;    }    else return 0;}int main(){    char n;    int a,b;    int f=0;    cout<<"Vyvedete duma simvol po simvol."<<endl;    do    {        cin>>n;        if (n!='/')        push_r(n);    }while (n!='/');    while (l!=r)    {        pop_l(a);        pop_r(b);        if (a!=b)            f=1; break;    }    if (f==1)        cout<<"Dumata ne e palindrom"<<endl;    else cout<<"Dumata e palindrom"<<endl;}

Редактирано от Spydoc (преглед на промените)

Edit: Оправих си грешката. Ето го финалния вид на задачата, направена с дек.

Ако направиш дека с контейнер - двойносвързан списък, ще си спестиш обхождането при вземане на елемент от края.

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

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

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

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

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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