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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.09.2014, 17:05   #1
TLandertinger
Пользователь
 
Регистрация: 09.05.2013
Сообщений: 29
По умолчанию Стек

Здравствуйте. У меня проблема. Вот задание
Описать массив записей "семья".
--------------------------------------------------------------
Отец ! Мать ! Ребенок ! ! Ребенок
--------------------------------------- -----------
Ф.И.О.!дата !Ф.И.О.!дата ! Имя !дата ! ...... ! Имя !дата
!рожд.! !рожд.! !рожд.! ! !рожд.
---------------------------------------------------------------
!__________________ ________________!
не более 5 детей

Найти и вывести имя младшего ребенка у Иванова И.И. по форме
_______________________________
имя ребенка ! дата рождения !
-------------------------------

Нужно оформить в виде стека. Программа правильно выводит имя ребенка и инфу о семьях, но препод не засчитал ее, ибо неправильно сделана.

Приложение консольное, C++ VS 2010
Вложения
Тип файла: txt Stack.txt (4.9 Кб, 133 просмотров)
TLandertinger вне форума Ответить с цитированием
Старый 22.09.2014, 22:09   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но препод не засчитал ее, ибо неправильно сделана.
Правильно. Стека я тут не увидел.
Попробуй поразбираться с таким примером:http://www.programmersforum.ru/showthread.php?t=259076
А вообще тебе наверное нужно что-то типа:
Код:
#include <iostream>

using namespace std;

//Структура, помещаемая в Стек
struct rec {
    //Допустим из одного поля
    char name[100];
};
// Сам стек
rec *stack;
// Его вершина и максимум
int top=0,smax;

// Функция помещения в стек
bool push(){
 //Если не превышает пределы стека то норм, иначе вернуть false
 if (top==smax) return false;
 // Просим ввести данные
 cout<<"Name please:";
 // И помещаем в вершину, передвигая потом указатель стека на следубщий элемент
 cin>>stack[top++].name;
 return true;
}

// Извлекаем из стека
bool pop(){
 //Если конечно есть что извлекать
 if (top<0) return false;
 //Передвигаем указатель с вершины на один вниз
 // показывая данные
 cout<<stack[--top].name<<'\n';
 return true;
}

int main()
{
    //Спрашиваем размер стека
    cout<<"Stack count items please: ";
    cin>>smax;
    stack=new rec[smax];
    //Забиваем в него данные
    int i;
    for(i=0;i<smax;i++) if(!push()) {cout<<"Problems pushing"<<'\n';break;}
    // Извлекаем из него данные
    for(i=0;i<smax;i++) if(!pop()) {cout<<"Problems popping"<<'\n';break;}
    //Освобождаем стек
    delete[] stack;
    cin.get();
    return 0;
}
I'm learning to live...

Последний раз редактировалось Stilet; 27.09.2014 в 19:31.
Stilet вне форума Ответить с цитированием
Старый 27.09.2014, 13:36   #3
TLandertinger
Пользователь
 
Регистрация: 09.05.2013
Сообщений: 29
По умолчанию

Цитата:
Попробуй поразбираться с таким примером:http://www.programmersforum.ru/showthread.php?t=259076
По поводу примера, ссылку на который Вы привели, мне не ясно вот что.Здесь программа разбивает текст на лексемы. В моем случае, как я понял, нужно, чтобы сначала выводилась последняя семья, затем предыдущая, и т.д., и в последнюю очередь первая.Или не так?
TLandertinger вне форума Ответить с цитированием
Старый 27.09.2014, 17:17   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Или не так?
Так. Поэтому я и вставил свой пример на случай если идею по ссылке ты не подчерпнешь
Будем надеяться что мой пример более легитимен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2014, 19:04   #5
TLandertinger
Пользователь
 
Регистрация: 09.05.2013
Сообщений: 29
По умолчанию

Извините, но программа с вашего примера, кроме ввода кол-ва элементов, ничего не выдает.(см.скриншот):
Изображения
Тип файла: jpg Stack eins.jpg (31.5 Кб, 69 просмотров)

Последний раз редактировалось TLandertinger; 27.09.2014 в 19:21.
TLandertinger вне форума Ответить с цитированием
Старый 27.09.2014, 19:14   #6
TLandertinger
Пользователь
 
Регистрация: 09.05.2013
Сообщений: 29
По умолчанию

При запуске выдаются предупреждения pop(push): значение возвращается не при всех путях выполнения, и диалог происходит так же, как на этом скриншоте. Но как только добавил
Код:
else return true;
после 35 и 26 строк, то программа выдает такую информацию, как на скриншоте выше.
Изображения
Тип файла: jpg Stack zwei.jpg (35.1 Кб, 74 просмотров)

Последний раз редактировалось TLandertinger; 27.09.2014 в 19:26.
TLandertinger вне форума Ответить с цитированием
Старый 27.09.2014, 19:31   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

return true; забыл в конец функций.
Цитата:
Stack count items please: 3
Name please:qwe
Name please:ad
Name please:zxc
zxc
ad
qwe

Process returned 0 (0x0) execution time : 6.512 s
Press any key to continue.
Я код в посте поправил
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2014, 19:48   #8
TLandertinger
Пользователь
 
Регистрация: 09.05.2013
Сообщений: 29
По умолчанию

Thank you!)))
TLandertinger вне форума Ответить с цитированием
Старый 27.09.2014, 20:47   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Joroshiku
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.09.2014, 14:42   #10
TLandertinger
Пользователь
 
Регистрация: 09.05.2013
Сообщений: 29
По умолчанию

Здравствуйте. Извините за беспокойство. У меня очередная непонятка. Как нужно в той же задаче вывести таблицу с помощью стека? Т.е. должно получиться типа
Код:
|Sidorov S.S.|21.2.1960|Sidorova A.V.|23.8.1965|Ekaterina|12.3.1987|Irina|13.9.1990|
|Ivanov I.I.|23.8.1965|Ivanova E.G.|13.7.1967|Oleg|13.4.1994|Olga|27.10.1996| 
//Вывод младшего ребенка у Иванова И.И.
|Olga|27.10.1996|
В бесстековой версии (очереди?) это было бы так:
Код:
|Ivanov I.I.|23.8.1965|Ivanova E.G.|13.7.1967|Oleg|13.4.1994|Olga|27.10.1996|
|Sidorov S.S.|21.2.1960|Sidorova A.V.|23.8.1965|Ekaterina|12.3.1987|Irina|13.9.1990|
//Вывод младшего ребенка у Иванова И.И.
|Olga|27.10.1996|
Или не так?

А точное задание выглядит так:
Необходимо реализовать функцию добавления в очередь (стек), печать очереди (стека) и поиск минимального в очереди (стеке). Реализацию функции извлечения не требуется.
TLandertinger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стек Igor95 Общие вопросы C/C++ 19 17.01.2013 04:31
Стек на С++ Electroflower Общие вопросы C/C++ 37 05.01.2012 14:20
Стек Darknes Общие вопросы C/C++ 2 11.04.2011 23:30
Стек [ICQ] Помощь студентам 5 02.05.2010 13:44
стек в с++ Aleksa_ks Помощь студентам 0 02.05.2010 12:12