Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
1 / 1 / 0
Регистрация: 29.03.2019
Сообщений: 12
1

Не понимаю что нужно сделать, что бы заработало, как исправить

21.05.2019, 19:49. Просмотров 271. Ответов 3
Метки нет (Все метки)

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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <ctime>
#include <iostream>
#include <Windows.h>
using namespace std;
 
struct Stack { // Структура с именем Stack
    int Data; // Какие то данные(могут быть любими, к примеру можно написать int key; char Data; или добавить еще какие то данные)
    Stack *next; // Указатель типа Stack на следующий эелемент
};
 
void s_push(Stack **top, int D) { // функция типа void(ничего не возвращает) которая принимает указатль на вершину стека и переменную которая будет записываться в ячейку
    Stack *q; // Создаем новый указатель q, который приравниваем к вершине стека. По сути это и есть наш новый элемент
    q = new Stack(); // выделяем память для нового элемента
    q->Data = D; // Записываем D в Data элемента
    if (top == NULL) { // Если вершины нет, тоесть стек пустой
        *top = q; // вершиной стека будет новый элемент
    }
    else // если стек не пустой
    {
        q->next = *top; // Проводим связь от нового элемента, к вершине. Тоесть кладем книжку на вершину стопки.
        *top = q; // Пишем, что вершиной теперь является новый элемент
    }
}
 
void s_delete_key(Stack **top, int N) { // функция которая принимает вершину top и число которое нужно удалить
    Stack *q = *top; // создаем указатель типа comp и приравниваем(ставим) его на вершину стека
    Stack *prev = NULL; // создаем указатель на предыдуший элемент, с начала он будет пустым
    while (q != NULL) { // пока указатель q не путой, мы его будем проверять, если он все же пусть цикл заканчивается
        if (q->Data == N) { // если Data элемента равна числу, которое нам нужно удалить
            if (q == *top) { // если такой указатель равен вершине, то есть элемент, который нам нужно удалить - вершина
                *top = q->next; // передвигаем вершину на следующий элемент
                free(q); // очищаем ячейку
                q->Data = NULL; // Далее во избежание ошибок мы обнуляем переменные в удаленной ячейке, так как в некоторых компиляторах удаленная ячейка имеет переменные не NULL значения, а дословно "Чение памяти невозможно" или числа  "-2738568384" или других, в зависимости от компилятора.
                q->next = NULL;
            }
            else // если элемент последний или находится между двумя другими элементами
            {
                prev->next = q->next; // Проводим связь от предыдущего элемента к следующему
                free(q); // очищаем ячейку
                q->Data = NULL; // обнуляем переменные
                q->next = NULL;
            }
        } // если Data элемента НЕ равна числу, которое нам нужно удалить
        prev = q; // запоминаем текущую ячейку как предыдущую
        q = q->next; // перемещаем указатель q на следующий элемент
    }
}
 
// вытолкнуть
void s_pop(Stack*& st) {
    Stack* t;
    if (st != NULL) {
        t = st;
        st = st->next;
        delete t;
    }
}
 
void s_print(Stack *top) { // принимает указатель на вершину стека
    Stack *q = top; // устанавливаем q на вершину
    while (q) { // пока q не пустой (while(q) эквивалентно while(q != NULL))
        printf_s("%i", q->Data); // выводим на экран данные ячейки стека
        cout << " ";
        q = q->next; // после того как вывели передвигаем q на следующий элемент(ячейку)
    }
}
 
int find_max(Stack *st) { // поиск максимальной суммы цирф
    Stack * t = NULL; // объявляем временный стэк
    t = st; // заносим во врменный стэк
    int maxsum = 0, temp = 0, data = 0; // перменные
    while (t != NULL) { // проходимся по стэку
        data = t->Data;
        while (data > 0) { // тут считается сумма цифр
            temp += (data % 10);
            data /= 10;
        }
        if (temp > maxsum) { // проврека на максимум
            maxsum = temp;
        }
        temp = 0; // обнуляем
        s_pop(t); // выталкиваем элемент из стэка
    }
    return maxsum; // возращаемое значение максимум суммы цирф
}
 
Stack * del_max(Stack *st) {
    Stack * t = NULL;
    t = st;
    int maxsum = find_max(t), temp = 0, data = 0;
    while (t != NULL) {
        data = t->Data;
        while (data > 0) {
            temp += (data % 10);
            data /= 10;
        }
        if (temp == maxsum) {
            s_delete_key(&st, t->Data);
        }
        temp = 0;
        s_pop(t);
    }
    return st;
}
 
int main() {
    SetConsoleOutputCP(1251); // устанавливаем отоборажение русскихсимволов в консоли
    srand(static_cast<unsigned int>(time(NULL)));
    Stack* st = NULL; // в начале программы у нас нет очереди, соответственно вершины нет, даем ей значение NULL
    for (int i = 0; i < 5; ++i)
        s_push(&st, rand() % 100); // заполняеим стэк
    cout << "Исходный стэк : ";
    s_print(st); // выводим  исходный стэк
    cout << endl;
    Stack *ST = NULL;
    ST = del_max(st); // получить   отсортированный  стэк
    cout << "Преобразованный стэк : ";
    s_print(ST); // выводим
    cout << endl;
    system("pause"); // ставим на паузу
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2019, 19:49
Ответы с готовыми решениями:

Алгоритм нахождения максимального потока. Где исправить что бы заработало?
Есть код с ошибками. Что нужно исправить что бы заработало?! Help me please! #include &lt;iostream.h&gt;...

Не могу отладить программу, не понимаю, что нужно сделать
Здравствуйте, срочно нужна помощь в дописании программы! Необходимо, чтобы программа запоминала...

Математическое моделирование. Не понимаю сути задачи, что нужно сделать. Программа на C++
Здравствуйте, вот такая задача. Предмет называется &quot;Математическое моделирование&quot;. Из колоды...

Не понимаю как исправить эту ошибку, и что она обозначает
Здравствуйте. Не понимаю как исправить эту ошибку.Вот коды: //Объявление класса Employee...

3
1 / 1 / 0
Регистрация: 29.03.2019
Сообщений: 12
21.05.2019, 19:53  [ТС] 2
скрин
0
Миниатюры
Не понимаю что нужно сделать, что бы заработало, как исправить  
3822 / 2159 / 894
Регистрация: 07.02.2019
Сообщений: 5,670
21.05.2019, 19:58 3
Цитата Сообщение от Sahitomo Посмотреть сообщение
q = new Stack()
Цитата Сообщение от Sahitomo Посмотреть сообщение
free(q)
для new есть delete
free для malloc
0
1 / 1 / 0
Регистрация: 29.03.2019
Сообщений: 12
21.05.2019, 20:19  [ТС] 4
скажите как мне записать это грамотно, добрый человек, у меня омрачение ума, ничего не получается

Добавлено через 1 минуту
скажите как мне записать это грамотно, добрый человек, у меня омрачение ума, ничего не получается
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2019, 20:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не понимаю что нужно изменить
#include &quot;stdafx.h&quot; #include &quot;MyString.h&quot; int _tmain(int argc, _TCHAR* argv) { MyString...

Нужно что бы пароль и имя записывались в файл, как исправить?
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt;...

Написала программу,но работает не так, как нужно. Что исправить?
Дано простое число. Написать функцию, которая находит следующее простое число. Никаких ошибок и...

Подскажите пожалуйста,что нужно сделать,что бы отображался русский язык??
Добрый вечер,формучани! После компиляции VS 12 у меня место русского языка показывает неизвестные...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.