Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы программирования на языке С. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
{
if (isalpha(s[i])) s1[k++]=s[i];
//isalpha(x), функция описанная в сtype.h, проверяет,
//является ли x латинской буквой
else if (s[i]=='(') push (&st, '(');
else if (s[i]==')')
while ((c=pop (&st, &er))!='(') s1[k++]=c;
else
switch (s[i])
{
case '+':case'-':
while ((c=peek(&st, &er))!='(') s1[k++]=pop(&st, &er);
case '*':case'/':
while ((c=peek(&st, &er))!='(')
{if (!ZNAK) break;
s1[k++]=pop(&st, &er);
}
push(&st,s[i]); break;
default: printf("Wrong simvol %c", s[i]); getch(); exit(-1);
}
}
//в заключение выполняются такие же действия,
//как если бы встретилась закрывающая скобка
while ((c=pop (&st, &er))!='(') s1[k++]=c;
s1[k]='\0';
printf("POLIS %s",s1);
getch();
}
Комментарий. Когда в записи формулы встречается знак операции – не скобка и не операнд – то с вершины стека извлекаются (до ближайшей скобки, которая сохраняется в стеке) знаки операций, старшинство кото­рых больше или равно старшинству данной операции, и они заносятся в выходной массив, после чего рассматриваемый знак заносится в стек.
1.
В файле находится текст программы на языке С. Написать, ис­пользую стек, препроцессор, проверяющий правильность вложенности циклов в этой программе.
2. В файле находится текст, в котором используют скобки трех типов: (), || ,{}. Используя стек, проверить соблюден ли баланс скобок в тексте.
3. Используя стек, решить задачу: в файле находится текст, сбалан­сированный по
круглым скобкам. Требуется для каждой пары соответ­ствующих открывающей и закрывающей скобок напечатать номера их по­зиций в тексте, упорядочив пары номеров по возрастанию номеров пози-
81
ций закрывающих скобок. Например, для текса a+(45-f(x)*(b-c)) надо напечатать 8 10, 12 16, 3 17
4. Используя очередь, решить задачу: в файле находится текст, сба­лансированный по круглым скобкам. Требуется для каждой пары соответ­ствующих открывающей и закрывающей скобок напечатать номера их по­зиций в тексе, упорядочив пары номеров по возрастанию номеров позиций открывающих скобок. Например, для текса a+(45-f(x)*(b-c))
надо напеча-
тать 3 17, 8 10, 12 16
5. Используя стек, проверить, является ли содержимое текстового файла правильно записью формулы следующего вида:
<формула>::=<терм>|<терм>+<формула>|<терм>-<формула> <терм>::=<имя>|<формула> <имя>::=x | y |z
6. В текстовом файле записана без ошибок формула следующего вида:
<формула>::=<цифра>|M(<формула>,<формула>)
|m(<формула>,<формула>)
<цифра>::=0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 M обозначает функцию максимума, а
m – функцию минимума
Используя стек, вычислить как целое число значение заданной фор-
мулы. Например, М(5,m(6,8)) = 6.
7. В текстовом файле записано без ошибок логическое выражение следующего вида:
<выражение>::=true | false | ! <выражение> | <выраже-
ние>&&<выражение> | <выражение>||<выражение>
Используя стек, вычислить значение этого выражения с учетом об-
щепринятого приоритета операций.
8. Используя стек вычислить как целое число
значение выражения,
записанного в ПОЛИЗе.
9. Используя стек, выражение, записанное в ПОЛИЗе, перевести в инфиксную форму.
10. Используя стек, переписать содержимое текстового файла, разде-
ленного на строки, в другой файл. Причем, необходимо переносить в ко­нец каждой строки все входящие в нее цифры в обратном порядке.
11. Используя очередь за один просмотр
файла, содержащего целые
числа, распечатать файл в следующем виде: сначала все числа меньшие A, затем все числа из интервала [A, B] и затем – все остальные числа.
12. Используя стек, проверить, является ли содержимое текстового файла правильно записью формулы следующего вида:
<формула>::=<цифра>|(<формула><знак><формула>) <знак>::=+|-|* <имя>::=x | y |z <цифра>::=0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
82
Список литературы
1. Библиотека MSDN. Настройка среды разработки Visual Studio 2010
http://msdn.microsoft.com/ru-RU/library/hthab0h8(v=vs.100).aspx
2. Каталог бесплатных курсов Интернет университета информационных техно-
логий по теории программирования http://www.intuit.ru/catalog/se/progtheory/
3. Керниган Б., Ритчи Д. Язык программирования Си http://www.netlib.narod.ru/
library/book0003/toc.htm
4. Керниган Б., Ритчи Д. Язык программирования Си.
2001. – 352 с.
5. Павловская Т.А. С/C++. Программирование на языке высокого уровня. –
СПб.: Питер, 2006. – 464 с.
6. Громов Ю.Ю., Татаренко С.И. Программирование на языке Cи. Учебное по-
собие http://cplus.h1.ru/cplus/progrc/dir.htm
7. Румянцев Д., Монастырский Л. Путь программиста: Опыт созидания личности
программиста. – М.: «Издательский Дом ИНФРА-М», 2000. – 864 с.
8. Сайт «Саратовские олимпиады
9. Сибеста Роберт У. Основные концепции языков программирования. Пер
с англ. – М.: Издательсктй дом «Вильямс», 2001. – 672 с.
10. Шилдт Г. Полный справочник по C. http://lord-n.narod.ru/download/books/ wal-
la/programming/Spr_po_C/main.htm#02
11. Шилдт Г. Полный справочник по С.М.: Вильямс, 2007. – 704 с.
по информатике» http://acm.sgu.ru/olimp/.
СПб.: «Невский Диалект»,
83
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]