Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Основы программирования на Си.doc
Скачиваний:
361
Добавлен:
02.05.2014
Размер:
1.3 Mб
Скачать

Все операции со стеком

Структура данных стека. Принципы выборки и записи в стек описаны выше.

// Работа со стеком. Проверка, пуст ли стек.

// Добавить в стек. Выбрать из стека.

// Стек полон

#include <stdio.h>

#include <dos.h>

#include <iostream.h>

#include <Process.H>

#include <Stdlib.H>

#include <conio.H>

#define max_size 200

char s[max_size]; //компоненты стека

int next=0; // позиция стека

int Empty()

{ return next==0; }

int Full()

{ return next==max_size; }

void Push()

{

if (next==max_size)

{

cout<<"Ошибка: стек полон"<<endl;}

else { next++;cout<<"Добавлен"<<endl;

cout<<"Что поместить в стек?"<<endl;

cin >> s[next-1];

}

}

void OUTst()

{

int i=0;

if (next==0) {

cout<<"Cтек пуст"<endl;

}

else { for(i=0;i<next;i++)

cout<<s[i]<<" "<<endl;

}

}

void Clear()

{ next=0; }

Poz()

{ return next; }

void Del()

{

int a;

if (next==0) cout<<"Ошибка: стек пуст"<<endl;

else {

next--;cout<<"Удален "<<endl;

}

}

void menu()

{

cout<<"0: распечатать стек"<<endl;

cout<<"1: добавить в стек"<<endl;

cout<<"2: удалить из стека"<<endl;

cout<<"3: узнать номер позиции в стеке"<<endl;

cout<<"4: узнать, пуст ли стек"<<endl;

cout<<"5: узнать, полон ли стек"<<endl;

cout<<"6: очистить стек"<<endl;

cout<<"7: выход"<<endl;

}

main()

{

char c;

clrscr();

textcolor(15);

do {

menu();

cin >> c;

clrscr();

switch (c) {

case '0':OUTst();getch();break;

case '1':Push();break;

case '2':Del();getch();break;

case '3':cout<<

"Hомер "<<Poz()<<endl;getch();break;

case '4':if (Empty()==1) cout<<"Пуст"<<endl;

else cout<<"Hе пуст"<<endl;getch();break;

case '5':if (Full()==1)cout<<"Полн"<<endl;

else cout<<"Hе полн"<<endl;getch();break;

case '6':Clear();cout<<

"Стек очищен"<<endl;getch();break;

case '7':exit(1);

}

delay(200);

}

while (c!=7);

return 0;

}

Подведем итог

Следует обратить внимание на самый существенный момент: программы нужно проектировать, а не создавать их методом проб и ошибок. Мы должны внимательно подумать о форме и содержании ввода и вывода для программы. Необходимо разделить программу на хорошо определенные задачи, затем раздельно запрограммировать, принимая во внимание их взаимодействие друг с другом. Идея заключается в достижении модульности. Если необходимо, разбивайте модули на еще более мелкие модули. Используйте функции для повышения степени модульности и простоты программы.

При проектировании программы попытайтесь предвидеть, что может идти неправильно, и программируйте, исходя из этого. Используйте локализацию ошибок, чтобы контролировать действия в местах потенциальных затруднений, или, по крайней мере, предупреждать пользователя, что может возникнуть осложнение. Гораздо лучше дать пользователю еще одну возможность ввести данные, чем продолжать выполнять программу и прийти к аварийной ситуации. Если создается функция, сначала определите, как она будет взаимодействовать с вызывающей программой. Решите также, какая информация будет входить в нее, а какая - выходить. Какими должны быть аргументы? Если вы примете во внимание все эти параметры, то можете обратить внимание на работу самой функции. Используйте эти идеи, и ваша программа будет более надежной и менее подверженной аварийным ситуациям. Вы получите тело функции, которое сможете применять в других программах. Программирование в таком случае потребует меньше времени. Не забывайте о классах памяти. Переменные можно определять вне функции. В этом случае их называют внешними или глобальными и они доступны более чем для одной функции. Переменные, определенные внутри функции, являются локальными для нее, и не известны другим функциям. Если можно, используйте автоматическую разновидность локальных переменных. Они охраняют переменные одной функции от взаимодействия других функций.