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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2017, 22:18   #1
amastudent
 
Регистрация: 17.09.2017
Сообщений: 6
Сообщение записать числа в стек

Доброго времени суток!
Укажите мне, пожалуйста, на ошибку.. Я не могу ее найти.
Суть проги в том, что она должна записать числа фибоначчи в стек, а потом вывести сначала четные,а потом нечетные.
Где я что-то делаю не так?


Код:
#include <iostream>
#include <conio.h>

using namespace std;


struct Zveno{
    int inf;
    Zveno *Next;
    Zveno *Prev;
    };



void InStack (int a, Zveno *h);
void FromStack(Zveno *h);
int fib (int a);
int main()
{

    int n, fibonacci;
    setlocale (LC_ALL, "Russian");
    cout << "Введите количество чисел последовательности:" << endl;
    cin >> n ;

    Zveno *head;
    head = new Zveno;
    head = NULL;

    for (int i = 1; i < n; i++){
        fibonacci = fib (i);
        InStack(fibonacci, head);

        }
        if (head == NULL)
            cout << "Стек пуст." << endl;

    cout << "Фибоначчи в стеке (сначала четные, затем нечетные):" << endl;
    while ((head != NULL)){
        FromStack(head);
    }

    cout << "\n" << endl;

    cout << "Программа выполнилась успешно!" << endl;
    getch();


    return 0;
}

void InStack (int a, Zveno *h){

    Zveno* Vsp = new Zveno;
    Vsp ->Prev = NULL;
    Vsp ->inf = a;
    if (h != NULL){
        Vsp ->Next = h;
        h ->Prev = Vsp;
        h = Vsp;
    }
    else {
        Vsp ->Next = NULL;
        h = Vsp;

    }
}

void FromStack (Zveno *h){
    Zveno *Vsp;
    if (h -> inf % 2 == 0)
    cout <<" "<< h->inf ;
    Vsp = h;
    h = h -> Prev;
    h -> Next = NULL;
    //delete Vsp;
}


int fib (int a){
    int res;
    if ((a==1) || (a==2)) res = 1;
        else res = fib(a - 1) + fib(a - 2);
        return res;
}
amastudent вне форума Ответить с цитированием
Старый 12.10.2017, 03:54   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вроде забацал:

Код:
#include <iostream>
#include <conio.h>
using namespace std;

struct Zveno
{
	int inf;
	Zveno *Next;
};

Zveno* InStack(int a, Zveno *h);
Zveno* FromStack(Zveno *h);
int fib(int a);

int main()
{
	int n, fibonacci;
	setlocale(LC_ALL, "Russian");
	cout << "Введите длину последовательности: ";
	cin >> n;

	Zveno *head = new Zveno;
	head = NULL;
	
	for (int i = 1; i <= n; i++)
	{
		fibonacci = fib(i);
		head = InStack(fibonacci, head);
	}
	
	if (head == NULL)
	{
		cout << "Стек пуст." << endl;
		//	getch();
		return 0;
	}

	cout << "Фибоначчи в стеке (сначала четные, затем нечетные):" << endl;	
	head = FromStack(head);
	cout << "\n" << endl;

	if (head == NULL)
		cout << "Программа выполнилась успешно!" << endl;
	else	
		cout << "Программа выполнилась неуспешно!" << endl;

	getch();
	return 0;
}

Zveno* InStack(int a, Zveno *head)
{
	Zveno* Vsp = new Zveno;	
	Vsp->inf = a;
	Vsp->Next = NULL;

	if (head != NULL)
	{
		Vsp->Next = head;
		head = Vsp;
	}
	else
	{
		head = Vsp;
	}	
	return head;
}

Zveno* FromStack(Zveno *head)
{
	Zveno *Vsp = NULL; // нечётные	
	Zveno *temp = NULL; 
	while (head != NULL)
	{
		temp = head;
		if (head->inf % 2 == 0)
		{
			cout << " " << head->inf;
		}
		else
		{
			Vsp = InStack(head->inf, Vsp);	
		}
		head = head->Next;
		delete temp;
	}
	cout << endl;
	while (Vsp != NULL)
	{
		temp = Vsp;
		cout << " " << Vsp->inf;
		Vsp = Vsp->Next;
		delete temp;
	}
	return head;
}

int fib(int a)
{
	if (a == 1) return 0;
	if (a == 2) return 1;
	return fib(a - 1) + fib(a - 2);
}

Протестируй хорошенько.
ura_111 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В новый стек записать все слова, которые не заканчиваются на заданную букву ggjgj Общие вопросы C/C++ 3 21.04.2017 23:52
числа в массиве записать в обратном порядке. max_cska Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 13.05.2016 13:51
Записать числа с файла через пробел.. manchester_alan Общие вопросы Delphi 7 14.12.2015 20:01
Стек содержащий только положительные числа eriskay Общие вопросы C/C++ 2 02.12.2011 02:03
Assembler (обратный код числа сохранить в стек) Exelence Помощь студентам 6 07.11.2010 23:33