Форум программистов, компьютерный форум CyberForum.ru

Динамическая структура данных (Стек) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти сумму элементов http://www.cyberforum.ru/cpp-beginners/thread1483559.html
Здравствуйте уважаемые киберфорумцы, нужна Ваша помощь, времени к сожалению нету самому разбираться, так как навалилось все большим комом и в один раз. Так вот, помогите решить задания, соответственно в C++ Получить матрицу А(4,4), для которой {a}_{ij}=\left\{\begin{matrix}sin(i+j)\\ 1\\ sin(\frac{1+j}{2i+j})\end{matrix}\right. Небольшая пометка к формуле, не смог написать ее до конца, в...
C++ Вычислить значение двойной суммы Здравствуйте уважаемые киберфорумцы, нужна Ваша помощь, времени к сожалению нету самому разбираться, так как навалилось все большим комом и в один раз. Так вот, помогите решить задания, соответственно в C++ Вычислить значение функции S=\sum_{k=1}^{n}\sum_{m=0}^{r}\frac{k}{1+{a}_{m}^{m+k} для {a}_{1}=1; {h}_{a}=1.2; n=8; r=5 Заранее спасибо! http://www.cyberforum.ru/cpp-beginners/thread1483557.html
Переполнение массива C++
Товарищи, имею такой вопрос- есть у меня часть кода, которая отвечает за загрузку из интерне xml файла и созраняющая его в массив. Все работает, но только во время первого цикла вызова функции internet(), во время вызова этой функции повторно- массив, содержащий значения, которые он получил циклом ранее переполняется. Пробовал освобождать его memsetом- но данные норовят записаться в конец...
Имитация действий пользователя C++
Не знаю в какую ветку написать. Есть программа SAP со списком клиентских заказов в магазине в виде таблицы. Если щелкнуть по заказу (строка), отобразиться более подробная информация со вкладкой о заказчике, в которой указан его email. Задача выгрузить email всех клиентов. Как сделать это средствами SAP, я не нашел. Какой язык можно использовать, чтобы написать программу, которая бы...
C++ Вывести столбцы матрицы в которых элементы образуют возрастающую последовательность http://www.cyberforum.ru/cpp-beginners/thread1483526.html
Здравствуйте, помогите пожалуйста с задачей. У меня проблема с проверкой последовательности. Дана матрица размером nхm. Вывести на экран столбцы (один или не-сколько) в которых элементы образуют до половины убывающую последовательность, а потом возрастающую.
C++ Переменным m и n присвоить первые два значения из файла Добрый день! Помогите, пожалуйста. Мне нужно из файла первое значение присвоить переменной m, второе значение - присвоить переменной n. Вот мой код. Также прилагаю файл f.txt, с которого осуществляет чтение. В итоге переменным m и n почему-то присваиваются нули. Прошу вас помочь и исправить этот код. Заранее благодарю! подробнее

Показать сообщение отдельно
yuyaryshev
18 / 18 / 6
Регистрация: 21.06.2015
Сообщений: 34
21.06.2015, 13:48     Динамическая структура данных (Стек)
По поводу поиска ошибки я уже писал, что нужно смотреть где именно оно падает при помощи дебагера.
Также предлагаю в начале немного причесать код, в любом случае он станет более читабельным и наглядным, будет легче искать ошибку и меньше шансов допустить новые.


Почему не стек:
- По принципу использования - ты просто хочешь хранить список записей push и pop в задаче работы с базой задач не актуальны
- По функциям работы с ним: у тебя Add, а не push и pop
Кстати, если нужен именно стек, он в стандартной библиотеке также есть: http://www.cplusplus.com/reference/stack/stack/
Ну это так, отступление от темы.


Что по исходникам:
Все что связанно с классом засунуть в сам класс - так будет гораздо проще искать ошибки и дописывать программу.
О чем я конкретно:
- Сейчас у тебя дублируется код: ты два раза описал, как ты добавляешь в стек (в случае из файла и в случае прямого ввода)
- Поэтому у тебя два раза будет встречаться инициализация поля next класса STACK - это не правильно, код не должен дублироваться
=> Нужно вынести функции работы со стеком в сам класс, получиться вот так:

struct STACK {
work info;
STACK* next = nullptr; // Инициализация один раз, там где она и должна быть

STACK* push_new() // Один раз описали функцию вставки нового элемента
{
STACK* tmp = new STACK();
tmp->next = next;
next = tmp;
return next;
};

STACK* pop() // Один раз описали функцию извлечения элемента
{
STACK* result = next;
if(next)
next = next->next;
return result;
};
};
// Просмотр стека без извлечения элементов будет выглядеть так
// for(auto it = начало_стека; it = it->next; it != nullptr)
// {
// }

Далее:
- Сейчас функции работы с work у тебя также в теле программы. Но по смыслу они привязаны именно к классу.
Почему я так решил?
Потому что если ты захочешь добавить/убрать/изменить поле в класс work, то тебе придется менять код в совсем других частях программы - как вводятся данные, как загружаются.
Сейчас класс в одном месте, а ввод его в другом. Можно в одном поменять, в другом забыть.

Предложение сделать так:

struct work{ // Инициализацию полей лучше добавить, в C++ она совсем не лишняя
char adres[25] = 0; //адресс
char type[25] = 0; //тип работ
int price = 0; //стоимость работ
int time = 0; //время работы
char name[80] = 0; //фамилия ответсвенного

void input()
{
cout << "\nАдрес: ";
cin >> adres;
cout << "\nТип работ: ";
cin >> type;
cout << "\nСтоимость работы: ";
cin >> price;
cout << "\nВремя работы: ";
cin >> time;
cout << "\nфамилия ответсвенного: ";
cin >> name;
};

void print()
{
cout << "\nАдрес: ";
cout << adres;
cout << "\nТип работ: ";
cout << type;
cout << "\nСтоимость работы: ";
cout << price;
cout << "\nВремя работы: ";
cout << time;
cout << "\nфамилия ответсвенного: ";
cout << name;
};

void load(ifstream& fin)
{
fin >> adres;
fin >> type;
fin >> price;
fin >> time;
fin >> name;
};

void save(ofstream& oin)
{
// TODO
};
};

Результат такой переделки:
отделить мух от котлет, станет проще искать ошибки и развивать прогу.

Добавлено через 8 минут
Код не запускал, где то мог что-то мелкое напутать.
Написал для примера, для понимания как можно разделить прогу на классы.

Потом увидел вот ошибку:
// Просмотр стека без извлечения элементов будет выглядеть так
// for(auto it = начало_стека; it != nullptr; it = it->next)
// {
// }

Добавлено через 4 минуты
Кстати под темой внизу приведены похожие. Там походу решение твоей задачи).
 
Текущее время: 12:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru