Фраза "Структурная переменная описывается с помощью переменной структурного типа" на мой Взгляд является тафтология. Из нее сложно понять суть утверждения. Хотелось бы полке понятного описания. |
Функции в примерах
Все операции со стеком
Структура данных стека. Принципы выборки и записи в стек описаны выше.
// Работа со стеком. Проверка, пуст ли стек. // Добавить в стек. Выбрать из стека. // Стек полон #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; }
Подведем итог
Следует обратить внимание на самый существенный момент: программы нужно проектировать, а не создавать их методом проб и ошибок. Мы должны внимательно подумать о форме и содержании ввода и вывода для программы. Необходимо разделить программу на хорошо определенные задачи, затем раздельно запрограммировать, принимая во внимание их взаимодействие друг с другом. Идея заключается в достижении модульности. Если необходимо, разбивайте модули на еще более мелкие модули. Используйте функции для повышения степени модульности и простоты программы.
При проектировании программы попытайтесь предвидеть, что может идти неправильно, и программируйте, исходя из этого. Используйте локализацию ошибок, чтобы контролировать действия в местах потенциальных затруднений, или, по крайней мере, предупреждать пользователя, что может возникнуть осложнение. Гораздо лучше дать пользователю еще одну возможность ввести данные, чем продолжать выполнять программу и прийти к аварийной ситуации. Если создается функция, сначала определите, как она будет взаимодействовать с вызывающей программой. Решите также, какая информация будет входить в нее, а какая - выходить. Какими должны быть аргументы? Если вы примете во внимание все эти параметры, то можете обратить внимание на работу самой функции. Используйте эти идеи, и ваша программа будет более надежной и менее подверженной аварийным ситуациям. Вы получите тело функции, которое сможете применять в других программах. Программирование в таком случае потребует меньше времени. Не забывайте о классах памяти. Переменные можно определять вне функции. В этом случае их называют внешними или глобальными и они доступны более чем для одной функции. Переменные, определенные внутри функции, являются локальными для нее, и не известны другим функциям. Если можно, используйте автоматическую разновидность локальных переменных. Они охраняют переменные одной функции от взаимодействия других функций.