С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 11.12.2014
Сообщений: 49

Написать класс, реализующий Стек

22.05.2015, 21:30. Показов 1850. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать класс, реализующий стек или очередь (что указано в задании). В классе описать соответствующие методы (push, pop и т.д.). В основной программе создать 1-2 экземпляра класса и выполнить то, что требуется в задании.
10. Студенты сдают свои работы в стопку (стек). У каждой работы свой объем (случайное число [10-50]). Старый преподаватель извлекает работы и ставит оценку, в зависимости от объема работы (до 10 – 1, до 20 – 2 и т.д.). Посчитать средний балл.

Где косяк?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "stdafx.h"
#include "iostream"
#include "conio.h"
 
using namespace std;
 
class stopk
{
private:
    //элемент очереди
    struct rabota
    {
        int v;//объем работы
        int ball; //оценка
        rabota *next;//следующий в очереди
    };
    rabota *head;//указатель на голову
    int size;//рамзер стопки
public:
    stopk() 
    {
        head = NULL;
        size = 0;
    }
    
    void push(double b) //вставка
    {
        rabota *newElem = new rabota;
        int v = (rand() % 25 + 25);//генерируем объем от 10 до 50 
        if (newElem->v<=10) newElem->ball = 1;
        if (newElem->v<=20) newElem->ball = 2;
        if (newElem->v<=30) newElem->ball = 3;
        if (newElem->v<=40) newElem->ball = 4;
        if (newElem->v<=50) newElem->ball = 5;
        newElem->next = NULL;
        if(size == 0)
            head = newElem;
        else
        {
            rabota *node = head;
            while (node->next != NULL)
                node = node->next;
            node->next = newElem;
        }
        size++;
    }
 
    double pop() //извлечение
    {
        if(size == 0)
            return 0;
        double b = head->ball;
        rabota *delElem = head;
        head = head->next;
        delete delElem;
        size--;
        return b;
    }
 
    bool isEmpty() //пустая очередь или нет
    {
        return (size == 0);
    }
 
    int sizestopk() //возвращает размер очереди
    {
        return size;
    }
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
    stopk st;
    int count = (rand() % 10 + 10);//генерируем очередь от 10 до 20 работ
    for(int i = 0; i < count; ++i)
        st.push(rand()%10000/ 100);
    double sum = 0;//сумма
    int countPeople = 0;
    while(!st.isEmpty())
    {
        sum += st.pop();
        countPeople++;
    }
    int srball=sum/countPeople; //средний балл
    printf("В стопке %d работ. Средний балл: %f", countPeople, srball);
    _getch();
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2015, 21:30
Ответы с готовыми решениями:

Класс, реализующий стек
Помогите девушке, только учусь программировать и чет пока не очень=( плиииииииииииииииииииииииииз кого не затруднит...... Задание 5....

Описать класс, реализующий стек
Всем привет, нуждаюсь в помощи. Описать класс, реализующий стек. Написать программу, использующую этот класс для моделирования...

Класс, реализующий стек точек
описание класса ,реализующего стек точек R2(int ,int) очень нужно,плиииз

6
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
22.05.2015, 22:48
void push(double b) //вставка
А зачем эта переменная, у тебя логически не правильно построина программа
0
0 / 0 / 0
Регистрация: 11.12.2014
Сообщений: 49
23.05.2015, 00:19  [ТС]
Почему не правильно? Делала по примеру препода, сама толком ничего не поняла.. Как сделать, чтобы она верно работала?
0
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
23.05.2015, 10:08
Нет зерна для рандомных чисел
C++
1
srand(time(0));
Опять же ты запускаеш цикл(//генерируем очередь от 10 до 20 работ) сколько чисел добавить надо и потом исходя так сказать из религии рандомом находиш числа и пишеш добавте мне ЭТИ числа в мой стек
C++
1
st.push(rand()%10000/ 100);
но потом в функции
C++
1
void push(double b)
благополучно забываеш забываеш про эти числа запуская новые рандомы
потом конструкции
C++
1
2
3
4
5
if (newElem->v<=10) newElem->ball = 1;
        if (newElem->v<=20) newElem->ball = 2;
        if (newElem->v<=30) newElem->ball = 3;
        if (newElem->v<=40) newElem->ball = 4;
        if (newElem->v<=50) newElem->ball = 5;
всегда будет работать только последний цикл, вот что бывает когда ленишся писать else...
C++
1
newElem->next = NULL; //строка 35 в программе твоей
исходя из этого строки
C++
1
2
            while (node->next != NULL) //строка 41
                node = node->next;       //строка 42
цикл не будет запушен никогда!

Добавлено через 58 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "iostream"
#include <time.h>
 
#include "conio.h"
 
using namespace std;
 
class stopk
{
private:
    //элемент очереди
    struct rabota
    {
        int v;//объем работы
        int ball; //оценка
        rabota *next;//следующий в очереди
    };
    rabota *head;//указатель на голову
    int size;//рамзер стопки
public:
    stopk();
    void push(int b);
    int pop();
    bool isEmpty();
    int sizestopk(); 
};
 stopk::stopk() 
  {
    head = NULL;
    size = 0;
  }
 void stopk::push(int b) //вставка
  {
    rabota *newElem = new rabota;
     newElem->v=b;
    if ((newElem->v)<10) 
        newElem->ball = 1;
    else if ((newElem->v)<20) 
        newElem->ball = 2;
    else if ((newElem->v)<30) 
        newElem->ball = 3;
    else if ((newElem->v)<40) 
        newElem->ball = 4;
    else if ((newElem->v)<51) 
        newElem->ball = 5;
    
     if(size == 0)
        {
         head = newElem;
         newElem->next = NULL;
        }
     else
      {
        rabota *node = head;
           while (node->next != NULL)
              node = node->next;
         node->next = newElem;
         newElem->next = NULL;
      }
    size++;
 }   
 int stopk::pop() //извлечение
 {
   if(size == 0)
       return 0;
  int b = head->ball;
  rabota *delElem = head;
  head = head->next;
   delete delElem;
  size--;
   return b;
 }  
 bool stopk::isEmpty() //пустая очередь или нет
 {
  return (size == 0);
 }
int stopk::sizestopk() //возвращает размер очереди
 {
   return size;
 }
int main()
{
    srand(time(0));
    setlocale(LC_ALL, "Russian");
    stopk st;
    int count = (rand() % 10 + 10);//генерируем очередь от 10 до 20 работ
    for(int i = 0; i < count; ++i)
        {
        int j=rand()%50;
         st.push(j);
        }
    int sum = 0;//сумма
    int countPeople = 0;
    while(!st.isEmpty())
    {
        sum += st.pop();
        countPeople++;
    }
    float srball=sum/countPeople; //средний балл
 printf("В стопке %d работ. Средний балл: %f", countPeople, srball);
   cout<<"\nСредний Бал="<<srball<<endl;
    _getch();
    return 0;
}
Добавлено через 3 минуты
Я запустил неправильно собраный велесепед исправил те ошибки которые сказал...
Посоветовал разгрузить еше мейн, ну и деструктор еше нужен...
1
0 / 0 / 0
Регистрация: 11.12.2014
Сообщений: 49
23.05.2015, 12:09  [ТС]
Спасибо большое! Только препод упорно утверждает, что это очередь и в блоке push нужно переделать на стек. Так же условия оттуда надо перенести в main
0
55 / 56 / 34
Регистрация: 29.12.2012
Сообщений: 478
23.05.2015, 12:19
а поточнее, а то непонятно что надо сделать?
0
0 / 0 / 0
Регистрация: 11.12.2014
Сообщений: 49
23.05.2015, 12:43  [ТС]
Это очередь, а не стек. Потому что он добавляет элемент в конец, а извлекает из начала. Ошибка тут, как сказал препод:

C++
1
2
3
4
5
6
7
8
 else
      {
        rabota *node = head;
           while (node->next != NULL)
              node = node->next;
         node->next = head;
         newElem->next = head;
      }
Так же эти условия он сказал переместить в блок main каким-то образом

C++
1
2
3
4
5
6
7
8
9
10
if ((newElem->v)<10) 
        newElem->ball = 1;
    else if ((newElem->v)<20) 
        newElem->ball = 2;
    else if ((newElem->v)<30) 
        newElem->ball = 3;
    else if ((newElem->v)<40) 
        newElem->ball = 4;
    else if ((newElem->v)<51) 
        newElem->ball = 5;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2015, 12:43
Помогаю со студенческими работами здесь

Описать класс, реализующий стек
Очень нужна хоть какая-нибудь помощь! У меня никак не получается написать программу а заказывать времени уже нет. обратиться больше некуда....

Описать класс, реализующий стек
Описать класс, реализующий стек. Написать программу, использующую этот класс для моделирования T-образного сортировочного узла на...

Описать класс, реализующий стек
Есть задание: Описать класс, реализующий стек и работу с ним. 1.) Класс должен содержать следующие сведения о наличии товара на складе: ...

Опишите класс, реализующий стек (Stack)
Разработать программу, использующую этот класс для моделирования Т-образного сортировочного узла на железной дороге. Программа должна...

Описать класс, реализующий стек и работу с ним
Вот вроде понял и что такое стек, и что такое классы и как их реализовать в отдельности. Но как их объеденить в одну программу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru