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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2009, 16:52   #1
Vikylik
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 10
Восклицание Исправить нерабочую программу с использованием СТЕКА, С++

Код:
#include <stdio.h>
#include<stdlib.h>
struct Stack
{
  int data;
  struct Stack *next;
};

typedef struct Stack StackN;
typedef StackN *StackPtr;

void push( StackPtr *,int);
int pop(StackPtr*);
int isEmpty(StackPtr);
void printStack(StackPtr);
void instructions(void);


/*вставить значение в вершину стека*/
void push(StackPtr *top, int info)
{
  StackPtr newP; 
  newP=malloc(sizeof(StackN));
   if(newP!=NULL) 
   {
    newP->data=info;
    newP->next=*top;
    *top=newP;
   }
  else
  printf("%d not inserted. No memory avaliable.\n",info);
}

/*стек пуст?*/
int isEmpty(StackPtr top)
{
  return top==NULL;
} 

int main()
{
  StackPtr stackPtr=NULL; /*указывает на вершину стека*/
  int choice, value;
  instructions();
  printf("?");
  scanf("%d",&choice);

   while(choice!=3) 
    {
     switch(choice){
     case 1:   /*затолкнуть значение в стек*/
       printf("Enter an integer: ");
       scanf("%d", &value);
       push(&stackPtr, value);
       printStack(stackPtr);
    break;
       case 2: /*вытолкнуть значение из стека*/
       if(!isEmpty(stackPtr))
       printf("The popped value is %d.\n", 
       pop(&stackPtr));
       printStack(stackPtr);
    break;
  default:
    printf("Invalid choice.\n\n");
    instructions();
  break;
 }
printf("?");
scanf("%d", &choice);
}
printf("End of run.\n");
return 0;
}

/*вывести инструкции*/
void instructions(void)
{
  printf("Enter choice:\n"
  "1  push a new element on the stack\n"
  "2  pop a new element off the stack\n"
  "3  end program\n");
}

/*удалить значение из вершины стека*/
int pop(StackPtr *top)
{
  StackPtr temp;
  int popValue;
  temp=*top;
  popValue=(*top)->data;
  *top=(*top)->next;
  free(temp);
  return popValue;
}

/*распечатать содержимое стека*/
void printStack(StackPtr current)
{
if(current==NULL)
 printf("The stack is empty.\n\n");
else {
 printf("The stack is:");

 while(current!=NULL){
  printf("%d",current->data);
  current=current->next;
  }
   printf("NULL\n\n");
  }
}
Vikylik вне форума Ответить с цитированием
Старый 22.04.2009, 12:09   #2
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Странно... Программа-то вроде рабочая...
Надо было всего-то дописать приведение типа в одной строке, чтобы компилилось, да пробел в printf'е вставить, чтоб числа не слипались...
Код:
#include <stdio.h>
#include<stdlib.h>
struct Stack
{
  int data;
  struct Stack *next;
};

typedef struct Stack StackN;
typedef StackN *StackPtr;

void push( StackPtr *,int);
int pop(StackPtr*);
int isEmpty(StackPtr);
void printStack(StackPtr);
void instructions(void);


/*вставить значение в вершину стека*/
void push(StackPtr *top, int info)
{
  StackPtr newP; 
  newP=(StackPtr)malloc(sizeof(StackN));
   if(newP!=NULL) 
   {
    newP->data=info;
    newP->next=*top;
    *top=newP;
   }
  else
  printf("%d not inserted. No memory avaliable.\n",info);
}

/*стек пуст?*/
int isEmpty(StackPtr top)
{
  return top==NULL;
} 

int main()
{
  StackPtr stackPtr=NULL; /*указывает на вершину стека*/
  int choice, value;
  instructions();
  printf("?");
  scanf("%d",&choice);

   while(choice!=3) 
    {
     switch(choice){
     case 1:   /*затолкнуть значение в стек*/
       printf("Enter an integer: ");
       scanf("%d", &value);
       push(&stackPtr, value);
       printStack(stackPtr);
    break;
       case 2: /*вытолкнуть значение из стека*/
       if(!isEmpty(stackPtr))
       printf("The popped value is %d.\n", 
       pop(&stackPtr));
       printStack(stackPtr);
    break;
  default:
    printf("Invalid choice.\n\n");
    instructions();
  break;
 }
printf("?");
scanf("%d", &choice);
}
printf("End of run.\n");
return 0;
}

/*вывести инструкции*/
void instructions(void)
{
  printf("Enter choice:\n"
  "1  push a new element on the stack\n"
  "2  pop a new element off the stack\n"
  "3  end program\n");
}

/*удалить значение из вершины стека*/
int pop(StackPtr *top)
{
  StackPtr temp;
  int popValue;
  temp=*top;
  popValue=(*top)->data;
  *top=(*top)->next;
  free(temp);
  return popValue;
}

/*распечатать содержимое стека*/
void printStack(StackPtr current)
{
if(current==NULL)
 printf("The stack is empty.\n\n");
else {
 printf("The stack is:");

 while(current!=NULL){
  printf("%d ",current->data);
  current=current->next;
  }
   printf("NULL\n\n");
  }
}
megachuhancer вне форума Ответить с цитированием
Старый 22.04.2009, 13:00   #3
Vikylik
Пользователь
 
Регистрация: 07.05.2008
Сообщений: 10
Восклицание

Спасибо, megachuhancer!
Только вот еще одна проблема. Необходимо на основе данного кода разработать приложение, работающее со стеком, содержащим данные о проданных игрушках. Элементом стека является структура, содержащая не менее 4-ех элементов. Выполнить добавление, удаление, редактирование элемента стека, распечатку всего стека.
Буду очень признательна, если поможешь...
Vikylik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переписать программу с использованием функций, С++ Vikylik Помощь студентам 2 09.04.2009 10:39
поогите исправить программу со стрингами Ananim-Pbl6ak Паскаль, Turbo Pascal, PascalABC.NET 7 02.01.2009 17:46
помогите исправить программу со стрингами Ananim-Pbl6ak Помощь студентам 2 31.12.2008 00:32
перевести программу из Pascal с использованием компонента Stringgrid в delphi. evrey Компоненты Delphi 4 02.06.2008 18:57
написать программу..которая с использованием метода наименьших квадратов определяет параметры зависимости Марго Помощь студентам 3 14.10.2007 15:47