Премини към съдържанието
  • Добре дошли!

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

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

     

anatoli.petrov95

Малко помощ, ако може за Курсов проект

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


Здравейте!Имам нужда от малко помощ по тази програма на C++: 
Съставяне на два динамично представени стека с целочислени данни,съдържащи се във външен файл. 
Сортиране на елементите в двете структури по метод чрез размяна (метод на мехурчето). 
Изграждане на подредена динамична структура дек,съдържащ елементите на двата стека и намиране на най-малкото число по-голямо от средноаритметичната стойност на всички елементи в дека. 
Запис на изходните резултати във външен файл. 
Ето до къде съм стигнал: 
#include <iostream> 
using namespace std; 

struct elem 

int key; 
elem *next; 

} *P,*N; 

void push(int n, elem *&start) 

elem *p = start; 
start = new elem; 
start -> key=n; 
start -> next=p; 

int pop(int &n, elem *&start) 

if(start) 

elem *p=start; 
n=start->key; 
start=start->next; 
delete p; 
return 1; 

else return 0; 

void bubbleSort2(elem *N[], int& n) 
{ int i=1, j, k; 
for (i=0; i<n-1; i++)  
for (j=n-1; j>=i; j--) 
if (P[j].key > P[j+1].key) { 
k=(int) N[j]; N[j]=N[j-1]; k=(int) N[j-1]; 
k = j; 


void bubbleSort3(elem *P [], int &n) 
{ int i=1, j, k; 
for (i=n; i<n-1; i++)  
for (j=n-1; j>=i; j--) 
if (N[j].key > N[j+1].key) { 
k=(int) P[j]; P[j]=P[j-1]; k=(int)P[j-1]; 
k = j; 

void main() 

int n=1; 
while(n) 

cout<<"\n Vuvedi cifra: "<<endl; 
cin>>n; 

if(n>0) 
{ push(n,P); 


else 

if(n<0) 
push(n,N); 



while(pop(n,P)) 

cout<<" "<<n<<"\t"; 
cout<<"Sortirane1"<<endl; 
bubbleSort2( &N,n); 
while(pop(n,N)) 

cout<<" "<<n<<"\t"; 
cout<<"Sortirane2"<<endl; 
bubbleSort3(&P,n); 
cout<<endl; 
}

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


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

Няма да се научите да използвате тага "Code" ...

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


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

Не е по условието, а по-скоро по това което си написал досега.

#include <iostream> 
using namespace std; 

struct elem 
{ 
    int key; 
    elem *next; 
}; 

void push(elem *&start, int n) 
{ 
     elem *p = start; 
     start = new elem; 
     start -> key=n; 
     start -> next=p; 
} 

int pop(elem *&start) 
{ 
    elem *p=start; 
    int  n=start->key; 
    start=start->next; 
    delete p; 
    return n; 
} 


void  print(elem* S)
{
     while(S)
     {
          cout<<S->key<<"  ";
          S = S->next; 
     }
     cout<<endl;
}

void bubblesort(elem* &S)
{
     elem *T=NULL;
     int n, flag;
     if (S==NULL) return;
     do
     {
         n=pop(S);
         flag=0;
         while (S)
         {
             if (S->key < n) 
             {
                 push(T,pop(S));
                 flag=1;
             } else {
                 push(T,n);
                 n=pop(S);
             } 
         }
         push(S, n);
         
         while (T) push(S,pop(T));
         
     } while (flag);
}

int main() 
{ 
    int n; 
    elem *P = NULL;
    elem *N = NULL;
    do 
    { 
         cout<<"Vuvedi cifra: "; 
         cin>>n; 

         if(n>0) push(P, n);
         else if (n<0) push(N, n);
    } while (n);
    
    print(N);
    cout<<"Sortirane1"<<endl; 
    bubblesort(N); 
    print(N);
    
    print(P);
    cout<<"Sortirane2"<<endl; 
    bubblesort(P); 
    print(P);
    cout<<endl; 
}

 

а ако смяташ че сортиране с използаване само на командите push() и pop() и втори спомагателен стек е прекалено бавно и неефективно може да сортираш директно вътре в стека.

 

void bubblesort(elem *&S)
{
     elem *T;
     int n, flag;
     if (S==NULL) return;
     do
     {
         flag=0;
         T = S;
         while (T->next)
         {
             if (T->next->key < T->key) 
             {
                 n=T->key;
                 T->key=T->next->key;
                 T->next->key=n;
                 flag=1;
             }
             T = T->next;
         }
     } while (flag);
}

 

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

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


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

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

void zapisfail(elem* S){
ofstream vfail("file.txt");
if(!vfail){
cout<<"Error";
return;
}
while(S){
vfail<<S->key<<" ";
S=S->next;
}
cout<<endl;
vfile.close();
}

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

void izvejdanefail(){ 
	vfail.open("file.txt");
	string line;
	while (getline(vfail, line)){
		getline(vfail, line);
		cout << line << endl;
	}
	file.close();
}

Някой?

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

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


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

Добавете отговор

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

Гост
Напишете отговор в тази тема...

×   Вмъкнахте текст, който съдържа форматиране.   Премахни форматирането на текста

  Разрешени са само 75 емотикони.

×   Съдържанието от линка беше вградено автоматично.   Премахни съдържанието и покажи само линк

×   Съдържанието, което сте написали преди беше възстановено..   Изтрий всичко

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Добави ново...