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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2014, 20:20   #1
Iron_f1st
 
Регистрация: 05.11.2013
Сообщений: 9
По умолчанию Статический стек (си)

Нужно было сделать программу выполняющую основные операции над статическим стеком

Написал вот так:

Код:
#include <stdio.h>
#include <conio.h>
#include <locale.h>
const int N=10;

struct stack
{ int arr[N];
  int count;

};

void Initial(stack *ps)
{

ps->count=0;

}

int Empty(stack *ps)
{

if (ps->count==0)
  return 1;
else
  return 0;

}
void Take( stack *ps, int *result)
{  *result=(ps->arr)[ps->count] ;
    ps->count--;
}

int Full(stack *ps)
{

if (ps->count==N)
return 1;
else
return 0;

}

void Add(stack *ps)
{ scanf_s("%d", &(ps->arr[ps->count]) );
 
ps->count++;
}


void Show(stack *ps)
{
for ( int i=0;i<ps->count;i++) 
     printf( " %d", ps->arr[i]) ;
}

void main()
{  stack s;
   setlocale(LC_ALL,"Russian");
   Initial(&s);
   int otv;
   int m=0;
   printf_s( "1. Добавление элемента в вершину стека\n");
   printf_s("2. Взять элемент из стека\n");
   printf_s("3. Вывести элементы стека\n");
   printf_s("4. Проверка пустоты стека\n"); 
   printf_s("5. Проверка заполненности стека\n");
   printf_s( "0. Выход\n");
   printf_s( " = ");


   do 
 {
   
   scanf_s("%d", &otv);
   switch(otv)
   {
    case 1:

     if (Full(&s)==1)
     printf_s("Стек полный\n");
     else
      {
       Add(&s);
       printf_s("Элемент добавлен в стек\n");
      }
    break;

    case 2:
    if (!Empty(&s))

	{   Take(&s, &m);
		printf_s("Из стека извлечён элемент: %d \n", m);
	}
    break;

    case 3:

     if (Empty(&s)==1)
      printf_s("Стек пуст\n");
     else
       {
         printf_s("Элементы стека");
         Show(&s);
         printf_s("\n");
       }
     break;

     case 4:

     if (Empty(&s)==1)
      printf_s("Стек пуст\n");
     else 
       printf_s("В стеке %d элемента\n", s.count);
     break;

     case 5:

      if (Full(&s)==1)
        printf_s("Стек полный\n");
      else 
       printf_s("Есть возможность добавить %d элементов\n", N-s.count);
     break;

     case 0:

     break;

     default:
     printf_s("Ошибка");
     break;

  }
 }while(otv!=0);
_getch();

}
почему-то не работает правильно функция взятия элемента из вершины стека(take). выдаёт неправильно число в духе -858993460. Что неправильно сделано?

Последний раз редактировалось Iron_f1st; 10.03.2014 в 20:25.
Iron_f1st вне форума Ответить с цитированием
Старый 10.03.2014, 20:30   #2
Iron_f1st
 
Регистрация: 05.11.2013
Сообщений: 9
По умолчанию

всё, разобрался.
Правильно нужно было так: *result=(ps->arr)[(ps->count)-1] ;
Iron_f1st вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Статический член класса halcyon Visual C++ 1 28.09.2012 21:09
Статический массив Си Newb1e Помощь студентам 3 18.06.2012 01:24
Статический класс stscolt PHP 4 20.05.2011 11:38
статический стек tuyana)) Visual C++ 0 04.04.2011 17:16
статический массив IrinaSS Общие вопросы C/C++ 2 08.12.2010 19:31