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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Програма свързана със сортиране на два стека

Featured Replies

Здравейте имам следната задача: 

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

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

   - Сортиране на елементите в стековете по метода прост избор/селекция (забранява се използването на масив!)

   - формиране на структура списък, съдържаща елементите на двата стека и намиране на най малкия елемент

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

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

 

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

В коментар съм написала структурата списък. За намирането на най малък елемен - става чрез сортиране/селекция??? Как става това??? Как да вкарам структурата в меню?

Как се съставят динамичните стекове т.е как се съдържат във файл? :/

Примерно сортиране чрез селекция (без масив!)?

Съставяне на меню? 

Моля ви помощ! 

#include <iostream>
using namespace std;

//инициализиране на функции
struct elem
{
	int key;
	elem *next;
}*start,*pst, *qst;

//прототипи на функцията
elem *push(elem *st, int n);
elem *pop(elem *st, int &n);
void init(elem *st);
int empty(elem *st);

elem *push(elem *st, int n)//добавяне на елемент
{
	elem *p;
	p=new elem;
	p->key=n;
	p->next=st;
	st=p;
	return p;
}

elem *pop(elem *st, int &n)//извличане на елемент
{
	elem *p;
	n=st->key;
	p=st;
	st=st->next;
	delete p;
	return st;
}

void init(elem *st)//инициализация на стек
{ st=NULL; }
int empty(elem *st)
{
	if (st==NULL)
		return 1;
	else
		return 0;
}
/* 
void list()
{
elem *p=start;

if (start)
 {
cout<<"Elementite v spisuka sa ";
while(p)
  { cout<<p->key<<"\t"; p=p->next; }
 }
}
*/
void main() 
{
	init(start);
	int num;
	cout<<"Vuvedete stoinost: \n";
	while (cin>>num)
		start=push(start, num);
	init(pst);
	init(qst);
	while(!empty(start))
	{
		start=pop(start, num);
		if(num>0)
			qst=push(qst, num);
		else
			pst=push(pst, num);
	}
	cout<<"\n Novite stekove sa: ";
	cout<<"\n Otricatelni stoinosti: ";
	while (!empty(qst))
	{
		qst=pop(qst,num);
		cout<<num<<' ';
	}
	cout<<"\n Polojitelni stoinosti: ";
	while (!empty(pst))
	{
		pst=pop(pst,num);
		cout<<num<<' ';
	}
	cout<<"\n";
	
	system("pause");
} 

 

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

преди 4 часа, Maria11 написа:

 

Здравейте имам следната задача: 

 

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

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

   - Сортиране на елементите в стековете по метода прост избор/селекция (забранява се използването на масив!)

   - формиране на структура списък, съдържаща елементите на двата стека и намиране на най малкия елемент

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

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

 

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

В коментар съм написала структурата списък. За намирането на най малък елемен - става чрез сортиране/селекция??? Как става това??? Как да вкарам структурата в меню?

Как се съставят динамичните стекове т.е как се съдържат във файл? :/

Примерно сортиране чрез селекция (без масив!)?

Съставяне на меню? 

Моля ви помощ! 


#include <iostream>
using namespace std;

//инициализиране на функции
struct elem
{
	int key;
	elem *next;
}*start,*pst, *qst;

//прототипи на функцията
elem *push(elem *st, int n);
elem *pop(elem *st, int &n);
void init(elem *st);
int empty(elem *st);

elem *push(elem *st, int n)//добавяне на елемент
{
	elem *p;
	p=new elem;
	p->key=n;
	p->next=st;
	st=p;
	return p;
}

elem *pop(elem *st, int &n)//извличане на елемент
{
	elem *p;
	n=st->key;
	p=st;
	st=st->next;
	delete p;
	return st;
}

void init(elem *st)//инициализация на стек
{ st=NULL; }
int empty(elem *st)
{
	if (st==NULL)
		return 1;
	else
		return 0;
}
/* 
void list()
{
elem *p=start;

if (start)
 {
cout<<"Elementite v spisuka sa ";
while(p)
  { cout<<p->key<<"\t"; p=p->next; }
 }
}
*/
void main() 
{
	init(start);
	int num;
	cout<<"Vuvedete stoinost: \n";
	while (cin>>num)
		start=push(start, num);
	init(pst);
	init(qst);
	while(!empty(start))
	{
		start=pop(start, num);
		if(num>0)
			qst=push(qst, num);
		else
			pst=push(pst, num);
	}
	cout<<"\n Novite stekove sa: ";
	cout<<"\n Otricatelni stoinosti: ";
	while (!empty(qst))
	{
		qst=pop(qst,num);
		cout<<num<<' ';
	}
	cout<<"\n Polojitelni stoinosti: ";
	while (!empty(pst))
	{
		pst=pop(pst,num);
		cout<<num<<' ';
	}
	cout<<"\n";
	
	system("pause");
} 

 

От първа точка в условието ти пише че трябва да е във външен файл плюс това да са динамични тоест ще ти трябва клас Стек заедно със структура и той да е в хедър и .cpp. По принцип структурите от данни за да работят нормално и лесно се нуждаят винаги от клас и структура. За намирането на най-малък елемнт аз си го представям че имаш финкция в нея попваш стек и зареждаш в масив всеки попнат елемент и правиш нещо от типа на

int min = stack_Arr[0];
for(int i=1;i<stack_Arr.length();i++)

{

     if(min > stack_Arr){ min = stack_Arr;}

}

 

Има доста неща за мислене по задачата. За кога ти е? Аз мога да ти помогна поне донякъде, но ще ми трябва един ден някъде.

 

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

От първа точка в условието ти пише че трябва да е във външен файл плюс това да са динамични тоест ще ти трябва клас Стек заедно със структура и той да е в хедър и .cpp. По принцип структурите от данни за да работят нормално и лесно се нуждаят винаги от клас и структура. За намирането на най-малък елемнт аз си го представям че имаш финкция в нея попваш стек и зареждаш в масив всеки попнат елемент и правиш нещо от типа на

int min = stack_Arr[0];
for(int i=1;i<stack_Arr.length();i++)

{

     if(min > stack_Arr){ min = stack_Arr;}

}

 

Има доста неща за мислене по задачата. За кога ти е? Аз мога да ти помогна поне донякъде, но ще ми трябва един ден някъде.

 

До 15 декември е.

преди 15 часа, frozener написа:

От първа точка в условието ти пише че трябва да е във външен файл плюс това да са динамични тоест ще ти трябва клас Стек заедно със структура и той да е в хедър и .cpp. По принцип структурите от данни за да работят нормално и лесно се нуждаят винаги от клас и структура. За намирането на най-малък елемнт аз си го представям че имаш финкция в нея попваш стек и зареждаш в масив всеки попнат елемент и правиш нещо от типа на

int min = stack_Arr[0];
for(int i=1;i<stack_Arr.length();i++)

{

     if(min > stack_Arr){ min = stack_Arr;}

}

 

Има доста неща за мислене по задачата. За кога ти е? Аз мога да ти помогна поне донякъде, но ще ми трябва един ден някъде.

 

Поне да бяхте прочели условието преди да ги напишете тея безсмислици, 

преди 7 часа, ined написа:

Поне да бяхте прочели условието преди да ги напишете тея безсмислици, 

???

преди 9 часа, frozener написа:

???

 

на 11/30/2016 в 0:01, frozener написа:

 в нея попваш стек и зареждаш в масив всеки попнат елемент

на 11/29/2016 в 19:38, Maria11 написа:

  - Сортиране на елементите в стековете по метода прост избор/селекция (забранява се използването на масив!)

 

Няма никакъв проблем да се сортира стек и без да се ползва допълнителен масив. Може и само с push() и pop() да го направиш, За сортиране с проста селекция ще ти трябват още два допълнителни стека - единия за временно съхраняване на числата докато прехвърляш числата от единия в другия докато намериш максималната стойност, а другия - за да записваш в него намерените максимуми - резултата е подреден стек като на върха е най-малкото число, а на дъното най-голямото.

преди 13 часа, flare написа:

 

 

Еми не се сещам как ще стане без масив. За "формиране на структура списък, съдържаща елементите на двата стека и намиране на най малкия елемент" се сещам как да се намери най-малкия елемент в стек:

 

node *t; // temporary pointer

t = top; // top of the stack

minElem = t->data;

while(t!=NULL){ if(minElem > t->next->data){ minElem = t->next->data; t=t->next;}}

??

Горния код е сбъркан, ще те оставя сам да си намериш грешката. Сортирането без масив не е чак толкова сложно

void selectsort(elem* &start)
{
    elem* p=start;
    start=NULL;
    while (p)
    {
        elem* s=NULL;
        int max=pop(p);
        while (p)
        {
            if (p->key > max) 
            {    
                push(s,max); 
                max=pop(p);
            }
            else push(s,pop(p));
        }
        push(start,max);
        p=s;
    }
}

 

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

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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