Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2022, 22:29   #1
MaxBrat
Пользователь
 
Регистрация: 27.09.2022
Сообщений: 32
Восклицание Очень важно нужно зделать простую програму на C++

У меня есть програма на C++ и мне нужно чтобы она была написана при помощи библиотеки STL.
Буду очень благодарен если поможете)).



Код:
#include<iostream>
#include<string>
using namespace std;
//створення структури елемента стека
struct elem {
  string name;
  int kol;
  elem* next;
};
//покажчик на вершину стека
elem*  top= 0;
//функція додавання елемента до стека
void add(int kol, string s) {
  elem* c = new elem;
  c->kol = kol;
  c->name = s;
  c->next = top;
  top = c;
}
//функція перегляду стека
void print() {
  elem* c = top;
  while (c != 0) {
    cout << c->name << "  " << c->kol << endl;
    c = c->next;
  }
}
//функція видалення стека
void del() {
  elem* c = top;
  top = top->next;
  delete c;
}


//функція обчислення кількості книжок
int book_kol() {
  int sum = 0;
  elem* c = top;
  while (c != 0)
  {
    
    sum += c->kol;
    c = c->next;
  }
  return sum;
}

int main() {
  int n, page; string name = "";
  
  cout << "Enter n=";
  cin >> n;
  for (int i = 0; i < n; i++)
  {
    cout << "Enter name=";
    cin >> name;
    cout << "Enter kol. pages=";
    cin >> page;
    add(page, name);
  }

  print();
  del();
  print();
  int kol = book_kol();
  cout << "Sum books=" << kol << endl;
  return 0;
}




Заранее всех благодарю))

Последний раз редактировалось BDA; 27.10.2022 в 01:21.
MaxBrat вне форума Ответить с цитированием
Старый 27.10.2022, 01:04   #2
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

На STL будет так:
Код:
#include <iostream>
#include <string>
#include <list>

using namespace std;

// створення структури елемента стека
struct elem {
  string name;
  int kol;
};

list<elem> _stack; // в новых компиляторах можно использовать класс forward_list (односвязный список)

// функція додавання елемента до стека
void add(int kol, string s) {
  elem c;
  c.kol = kol;
  c.name = s;
  _stack.push_front(c); // в новых компиляторах можно использовать метод emplace_front
}

// функція перегляду стека
void print() {
  // в новых компиляторах можно использовать range for
  for (list<elem>::iterator i = _stack.begin(); i != _stack.end(); ++i) {
    cout << i->name << " " << i->kol << endl;
  }
}

// функція видалення стека
void del() {
  _stack.pop_front();
}

// функція обчислення кількості книжок
int book_kol() {
  int sum = 0;
  for (list<elem>::iterator i = _stack.begin(); i != _stack.end(); ++i) {
    sum += i->kol;
  }
  return sum;
}

int main() {
  int n, page;
  string name;

  cout << "Enter n=";
  cin >> n;
  for (int i = 0; i < n; i++) {
    cout << "Enter name=";
    cin >> name;
    cout << "Enter kol. pages=";
    cin >> page;
    add(page, name);
  }

  print();
  del();
  print();
  int kol = book_kol();
  cout << "Sum books=" << kol << endl;
  return 0;
}
Пётр Седов вне форума Ответить с цитированием
Старый 27.10.2022, 07:53   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
На STL будет так:
Не будет. На STL возьмется std::stack и все.
p51x вне форума Ответить с цитированием
Старый 27.10.2022, 13:34   #4
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
На STL возьмется std::stack и все.
std::stack не даёт возможность перебрать все элементы. Это требуется 2 раза для решения задачи.
Пётр Седов вне форума Ответить с цитированием
Старый 27.10.2022, 13:42   #5
MaxBrat
Пользователь
 
Регистрация: 27.09.2022
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
На STL будет так:
Код:
#include <iostream>
#include <string>
#include <list>

using namespace std;

// створення структури елемента стека
struct elem {
  string name;
  int kol;
};

list<elem> _stack; // в новых компиляторах можно использовать класс forward_list (односвязный список)

// функція додавання елемента до стека
void add(int kol, string s) {
  elem c;
  c.kol = kol;
  c.name = s;
  _stack.push_front(c); // в новых компиляторах можно использовать метод emplace_front
}

// функція перегляду стека
void print() {
  // в новых компиляторах можно использовать range for
  for (list<elem>::iterator i = _stack.begin(); i != _stack.end(); ++i) {
    cout << i->name << " " << i->kol << endl;
  }
}

// функція видалення стека
void del() {
  _stack.pop_front();
}

// функція обчислення кількості книжок
int book_kol() {
  int sum = 0;
  for (list<elem>::iterator i = _stack.begin(); i != _stack.end(); ++i) {
    sum += i->kol;
  }
  return sum;
}

int main() {
  int n, page;
  string name;

  cout << "Enter n=";
  cin >> n;
  for (int i = 0; i < n; i++) {
    cout << "Enter name=";
    cin >> name;
    cout << "Enter kol. pages=";
    cin >> page;
    add(page, name);
  }

  print();
  del();
  print();
  int kol = book_kol();
  cout << "Sum books=" << kol << endl;
  return 0;
}
Спасибо большое всё получилось
MaxBrat вне форума Ответить с цитированием
Старый 27.10.2022, 13:45   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. если вы лазиете по стеку как попало, то это не стек, а гавно и задача на стек не выполнена
2. по задаче ему надо пройти по стеку и подсчитать кол-во книг - все, для этого не надо ничего кроме стандартного интерфейса стека
3. если хочется для себя распечать, то тоже варианты есть
p51x вне форума Ответить с цитированием
Старый 27.11.2022, 19:08   #7
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
2. по задаче ему надо пройти по стеку и подсчитать кол-во книг - все, для этого не надо ничего кроме стандартного интерфейса стека
Нет, у std::stack нет методов begin/end для доступа ко всем элементам. Есть только метод top для доступа к крайнему элементу.
Пётр Седов вне форума Ответить с цитированием
Старый 27.11.2022, 19:14   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
Нет, у std::stack нет методов begin/end для доступа ко всем элементам.
Они нафик не нужны. Вы не знаете, что такое стек и как с ним работать? Еще раз повторю:
Цитата:
Сообщение от p51x Посмотреть сообщение
1. если вы лазиете по стеку как попало, то это не стек, а гавно и задача на стек не выполнена
Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
Есть только метод top для доступа к крайнему элементу.
И еще парочку для работы...
p51x вне форума Ответить с цитированием
Старый 04.12.2022, 02:55   #9
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы не знаете, что такое стек и как с ним работать?
Стек -- это когда элементы добавляются/удаляются только с одного конца последовательности. При этом перебирать все элементы последовательности вроде бы никто не запрещает.

Вы предложили использовать std::stack:
Цитата:
Сообщение от p51x Посмотреть сообщение
На STL возьмется std::stack и все.
Вот и покажите код, как вы перебираете все элементы std::stack. Это требуется два раза для решения задачи (например чтобы вывести на консоль).
Пётр Седов вне форума Ответить с цитированием
Старый 04.12.2022, 09:05   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
При этом перебирать все элементы последовательности вроде бы никто не запрещает.
Пока вы в рамках интерфеса без проблем.

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
Вот и покажите код, как вы перебираете все элементы std::stack.
А чем он будет отличаться от стандартного?

Цитата:
Сообщение от Пётр Седов Посмотреть сообщение
Это требуется два раза для решения задачи (например чтобы вывести на консоль).
1. Не требуется. А захотелось, т.к. непонимает, что такое стек и как он работает.
2. Если хочется, то используйте копию или временный стек.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень важно нужно зделать простую програму на C++ MaxBrat Помощь студентам 1 27.09.2022 19:53
!!!очень важно нужно сдать завтра Alexandra21 Visual C++ 6 10.06.2015 09:59
Спасайте,нужно написать очень простую програмку на Delphi mast2xx Помощь студентам 10 13.02.2010 22:12
Ребята помогите зделать програму в Delphi 7 PashAs Помощь студентам 17 30.04.2009 13:51