Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 17110 / 2712 | Оценка: 4.07 / 3.55 | Длительность: 13:11:00
ISBN: 978-5-9556-0057-4
Лекция 16:

Функции в примерах

< Лекция 15 || Лекция 16: 123456

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

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

// Работа со стеком. Проверка, пуст ли стек. 
// Добавить в стек. Выбрать из стека.
// Стек полон 
#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;
}

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

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

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

< Лекция 15 || Лекция 16: 123456
Вадим Ратьков
Вадим Ратьков

Объясните, пожалуйста, чем отличаются два этих кода?

printf("смешанное деление: 7./4 это %2.2f \n", 7./4);

и

printf("смешанное деление: 7./4 это %f \n", 7./4);

%f  это, понятное дело, float. А что такое %2.2f ?

Вопрос возник при прочтении лекции 3 часть вторая курса Основы программирования на языке C.

http://www.intuit.ru/studies/courses/43/43/lecture/1281?page=2

Анна Алексанина
Анна Алексанина

Я хочу выполнить одну из программ, которые есть в лекции. Но для этого мне надо компилировать текст, а я не знаю, как это сделать. ОС Windows.

Константин Курицын
Константин Курицын
Россия
Ильсияр Нигаматьянова
Ильсияр Нигаматьянова
Россия, село Верхние Татышлы