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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Помощ C++

Featured Replies

Здравейте!Имам нужда от малко помощ по тази програма на C++: 
Съставяне на два динамично представени стека с целочислени данни,съдържащи се във външен файл. 

 
току-що, petar96 написа:

Някой да има идея

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

  • Автор

Искам помощ как да се направят тези два динамични стека и да се чете файла, защото няма и идея как ще стане

преди 3 часа, petar96 написа:

Някой да има идея

От BgDev тук пишеш? лол

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

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

#include <iostream>
using namespace std;

#ifndef STACKCHE_H
#define STACKCHE_H

struct Stackche
{
  int data;
  Stackche *next;
};

Stackche *top = NULL;
void push(int data)
{
  Stackche *temp = new Stackche;
  
  temp->data = data;
  temp->next = top;
  top = temp;
  cout << temp->data << endl;

}


void pop()
{
  Stackche *temp;
  if(top != NULL)
  {
    temp = top;
    top = top->next;
    delete temp;
  }
}

#endif
  
// main file
  
#include <iostream>
#include "stackche.h"

using namespace std;

int main()
{
  push(10);
  push(20);
  pop();

  return 0; 
}

 

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

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

Въпросът е дали по нормалният начин със свързани списъци му трябва или чрез динамични масиви.

преди 11 минути, frozener написа:

Въпросът е дали по нормалният начин със свързани списъци му трябва или чрез динамични масиви.

Въпросът е защо програмата ти не е подходяща принципно и за конкретната задача. Правиш хедър файл за стек с готини протекторчета като по учебник и слагаш глобална променлива вътре в него :D А случая искаме и два стека... 

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

преди 56 минути, flare написа:

Въпросът е защо програмата ти не е подходяща принципно и за конкретната задача. Правиш хедър файл за стек с готини протекторчета като по учебник и слагаш глобална променлива вътре в него :D А случая искаме и два стека... 

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

А иначе странно ми е защо в имплементациите на стекове структурата е извън класа понеже така не е енкапсулирана и всеки има достъп до нея.

преди 1 минута, frozener написа:

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

А иначе странно ми е защо в имплементациите на стекове структурата е извън класа понеже така не е енкапсулирана и всеки има достъп до нея.

Все така нямаш извинение за глобалната променлива. Даже специално наблегнах на протектора на хедъра, защото такъв се слага ако очакваш многократно вмъкване.

И кои са тeзи имплементации?

преди 14 минути, flare написа:

Все така нямаш извинение за глобалната променлива. Даже специално наблегнах на протектора на хедъра, защото такъв се слага ако очакваш многократно вмъкване.

И кои са тeзи имплементации?

Не се сещам за протектор на хедър? Какво представлява? А иначе говоря за повечето примери в нета и по книжките за реализация на стек чрез свързан списък. Структурата е извън класа, а вътре в краса има обект на структурата който представлява началния нод(елемент) на стека, който е нулев пойнтер и после в пуш метода почва да сочи към новосъздадения. Аз днес доста време се борих с клас имплементация с темплейт обаче синтаксиса просто ме спъва и затова  избягвам ооп в с++

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

преди 30 минути, frozener написа:

Не се сещам за протектор на хедър? Какво представлява?

преди 31 минути, frozener написа:

Не се сещам за протектор на хедър? Какво представлява? А иначе говоря за повечето примери в нета и по книжките за реализация на стек чрез свързан списък. Структурата е извън класа, а вътре в краса има обект на структурата който представлява началния нод(елемент) на стека, който е нулев пойнтер и после в пуш метода почва да сочи към новосъздадения.

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

Протектор се нарича ето това:

#ifndef STACKCHE_H
#define STACKCHE_H
//...
#endif
  • Автор

Ето я задачата

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

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

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

Искам помощ как да ги създам тези два стека и те да четат файла

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

  • Автор
#include<iostream>
#include<fstream>
using namespace std;
struct elem
{
int key;
elem *next;
} // struktura za elementite na stekovete/spisuka
*first = NULL, *p;
fstream file;
ofstream outStream;
class CStack
{
public:
elem *first;
CStack();// konstrutkor
~CStack();// destruktor
void Delete_stack();// itrivate na steka
int Pop(int &n);// izvlichane na element
void Push(int n);// dobavqne na element
void Output_elements();// izvejdane na elementite
void Fill_stack();// zapulvane na steka ot fail
};
class CList
{
public:
elem *first;
CList();// konstruktor
~CList();// destruktor
void Delete_list();// iztrivane na spisuka
void Add_back(int n);// dobavqne na element v zadnata 4ast na spisuka
void Search_element(int n);// tursene elementi po kriterii
void Output_elements();// izvejdane na elementite
void Fill_list();// zapulvane na spisuka ot fail
void Save_list();// zapisvane na elementite ot spisuka vuv fail
};
void quickSort(int arr[], int left, int right);// sortirane na elementite kato gi vzemem ot dvata steka i gi slagame v spisuka
void Show_menu();// vizualizirane na menuto
void main()
{
char fileName[20];
int choice, element;
CStack stack1, stack2;
CList list;
do
{
Show_menu();
cout << "Izbere opciq:\t";
cin >> choice;
switch (choice)// menuto se realizira chrez switch
{
case 1:
cout << endl << "Vuvedete imeto na faila ot koito shte se izvlichat dannite za purviq stek :\t";
cin >> fileName;
strcat_s(fileName, ".txt");
file.open(fileName, ios::in);
if (!file)
{
cout << "Greshka!" << endl;
}
stack1.Fill_stack();
file.close();

cout << endl << "Vuvedete imeto na faila ot koito shte se izvlichat dannite za vtoriq stek :\t";
cin >> fileName;
strcat_s(fileName, ".txt");
file.open(fileName, ios::in);
if (!file)
{
cout << "Greshka!" << endl;
}
stack2.Fill_stack();
file.close();
break;
case 2:
void quickSort(int arr[], int left, int right);
cout << "Gotovo!" << endl;
break;
case 3:
cout << "Purvi stek:\n";
stack1.Output_elements();
cout << "Vtori stek:\n";
stack2.Output_elements();
cout << "Spisuk:\n";
list.Output_elements();
break;
case 4:
cout << "Vuvedete chislo\n";
cin >> element;
list.Search_element(element);
break;
case 5:
list.Save_list();
break;
case 6:
cout << "Chao!" << endl;
break;
default:
cout << "Nevaliden izbor!" << endl;
break;
}
} while (choice != 6);

system("pause");
}
CStack::CStack()
{
first = NULL;
}
CStack::~CStack()
{
Delete_stack();
}
CList::CList()
{
first = NULL;
}
CList::~CList()
{
Delete_list();
}
void CStack::Delete_stack()
{
elem* p;
while (first)
{
p = first;
first = first->next;
delete p;
}
}
void CList::Delete_list()
{
elem* p;
while (first)
{
p = first;
first = first->next;
delete p;
}
}
void CList::Search_element(int n) //funkciqta poema kato parametur chisloto na koeto iskame da tursim nai-malkoto kratno
{
elem* p = first;
int minElem = 999999;
while (p)
{
if (p->key % n == 0 && p->key < minElem)
minElem = p->key;
p = p->next;
}
if (minElem == 999999)
{
cout << "Nqma element kraten na posochenoto chislo" << endl;
}
else
cout << "Nai-malkoto chislo kratno na posochenoto chislo e " << minElem << endl;
}
void CStack::Output_elements()
{
elem* p = first;
if (first)
{
cout << "The stack is:\n";
while (p)
{
cout << p->key << " ";
p = p->next;
}
}
else cout << "The stack is empty.";
cout << endl;
}
void CList::Output_elements()
{
elem* p = first;
if (first)
{
cout << "The list is:\n";
while (p)
{
cout << p->key << " ";
p = p->next;
}
}
else cout << "The list is empty.";
cout << endl;
}
void CStack::Fill_stack()
{
int num;
file >> num;
while (num && !file.eof())
{
Push(num);
file >> num;
}
Push(num);
file >> num;
}
void CList::Fill_list()
{
int num;
file >> num;
while (num && !file.eof())
{
Add_back(num);
file >> num;
}
}
void CList::Add_back(int n)
{
elem *p = first, *q;
q = new elem;
q->key = n;
q->next = NULL;
if (first)
{
while (p->next)
p = p->next;
p->next = q;
}
else
first = q;
}
void Show_menu()
{
cout << "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
cout << "	1:Izvlichane na chisla ot failvoe." << endl;
cout << "	2:Sortirovka" << endl;
cout << "	3:Izvejdane na stekovete i na spisuka." << endl;
cout << "	4:Izvejdane na nai-malkoto chislo kratno na posochneo ot vas chislo." << endl;
cout << "	5:Zapis na spisuka vuv fail." << endl;
cout << "	6.Exit" << endl;
cout << "=+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" << endl;
}
void quickSort(int arr[], int left, int right) {
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];

/* partition */
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};

/* recursion */
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}


void CStack::Push(int n)
{
p = first;
first = new elem;
first->key = n;
first->next = p;
}
int CStack::Pop(int &n)
{
if (first)
{
n = first->key;
p = first;
first = first->next;
delete p;
return 1;
}
else return 0;
}
void CList::Save_list()
{
char fileName[20];
elem* p = this->first;
cout << "File name:\t";
cin >> fileName;
strcat_s(fileName, ".txt");
outStream.open(fileName);
if (!outStream)
{
cout << "File couldn`t be opened!" << endl;
}
else
{
while (p != NULL)
{
outStream << p->key << " ";
p = p->next;
}
}
}

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

преди 2 часа, petar96 написа:

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

"стигнал" е доста силно казано - копирал си го от тука http://forums.data.bg/index.php?showtopic=2207448

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

  • Автор

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

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

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

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

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

Дарение

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

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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