Автор: Пользователь скрыл имя, 08 Декабря 2011 в 17:58, курсовая работа
«С  – удобный, выразительный и гибкий язык, пригодный для программирования широкого класса задач», – таково мнение создателей С Брайана Кернигана и Дениса Ритчи. Язык С приобрел широкую известность как язык разработки операционной системы UNIX. Сегодня многие операционные системы написаны на С++.
   С++ – это язык, расширяющий возможности  С. Его разработал Бьерн Страуструп. Название С++ предложил Рик Массити. Оно указывает на эволюционную природу перехода к нему от С, так как «++» – это операция приращения в С.
Введение. 4
Математическая формулировка задачи. 6
Описание программы…………………………………………………………………………………..7
Руководство пользователя 8
Выводы (заключение). 10
Список использованной литературы. 11
Приложение 1 (текст программы). 12
                              
     В 
данной курсовой работе  был изучен 
и реализован на практике алгоритм Рутисхаузера. 
В ходе курсового проектирования были 
использованы условный оператор, 
оператор выбора, инициализация массивов. 
Рассмотрены основные характеристики 
используемых языке программирования 
– С++. Вся программа протестирована на 
различных наборах данных и ошибок выявлено 
не было. 
 
 
1. Уолтер Сэвитч. С++ в примерах. Москва: Эком, 1997. (3 шт.)
2. В.А. Скляров. Язык С++ и объектно-ориентированное программирование. –Мн.: Выш. шк.,1997. (20 шт.)
3. Язык программирования Си. Москва: Производственно-внедренческий кооператив "И Н Т Е Р Ф Е Й С", 1988. (0)
4. Б.В. Керниган,Д.М. Ричи. ЯЗЫК С. (17 шт.)
5. В.А. Скляров. Программирование на языках Си и Си++. Мн.: Выш. шк.,1997. (2 шт.)
6. Страуструп Бьерн. Язык программирования Си++. М.: Софт,1999. (10 шт.).
7. Шилд Герберт. - Самоучитель C++ / Герберт Шилдт . - СПб : BHV - Санкт-Петербург, 1997. - 511 с. (1).
8. Как программировать на С++ . Дж. Дейтел. Пер. В. Кузьменко . - М. : ЗАО "Издательство БИНОМ", 1998. - 1021 с. : ил.(1).
9. Visual C++ 6 Новые 
возможности для программистов. Ю. Тихомиров.- 
СПб.:БХВ-Санкт-Петербург,1998.
10. Основы алгоритмизации и программирования. Язык СИ. Е.М.Демидович.Мн.: “Бестпринт” 2003 г.
11.Использование Visual C++ 6. Специальное издание. Грегори К.: Пер. с англ.-М.;СПб.;К.: Издательский дом “Вильямс”, 2001.-864 с.
 
//Курсовая работа."Разбор строкового выражения. Алгоритм //Рутисхаузера"
// 
#include <iostream>
#include <fstream>
using namespace std;
//поиск и обработка отрицательных чисел
void 
negative_change();  
//поиск места для скобок
void 
place_to_bracket(); 
//вставка скобок в найденные места
void 
_input(int, int);  
//удаление тройки (2 операнда и операция) и скобок
void 
_delete(int, int); 
//выполнение алгоритма
void 
do_it(); 
//поиск скобок в формуле (если не осталось - получен ответ)
bool 
no_bracket(); 
//поиск наибольшего приоритета
int 
place_with_max(); 
//выделение тройки от места с наибольшим приоритетом
void 
get_answer(int); 
//вставка результата
void 
include_answer(int, int, int); 
char str[256]; //формула
char sign[256]; //приоритеты элементов
int len;
int main ()
{
setlocale(LC_ALL,"rus"); //разрешение на русский язык
char file[64];
cout<<"Введите имя файла: ";
cin>>file;
ifstream in(file, ios::in); //создаём поток ввода, связанный с файлом (без указания пути - в текущем каталоге)
if (!in) //если не получилось
{
cerr<<"Невозможно открыть файл!"; //пишем это
            exit(EXIT_FAILURE)
}
      in.getline(str,256); //
      len=strlen(str);  //
cout<<str<<endl;
      negative_change(); //
                              
      place_to_bracket(); //
                              
do_it(); //решаем формулу
      cout<<str<<endl;  //
in.close(); //закрываем файл
return 0;
} 
void negative_change()
{
for (int i=0; i<len; i++) //пробег по всем символам формулы
{
            if 
(str[i]=='-'&&(str[i-1]=='('||
{
for (int right=strlen(str+i)+i+2; right>i; right--) //то сдвигаем все символы на 1 позицию вправо
                        str[
                  str[i]='0'; 
                  len++;      
}
else if (str[i]==' ') //если нашли пробел (они в формуле лишние)
{
for (int target=i; target<len; target++) //двигаем все символы на 1 влево
                        str[
                  --len;     /
                  --i;  //
}
}
} 
void place_to_bracket()
{
int balance=0, left=0, right=0, j=0;
bool empty=true;
for (int step=2; step; step--) //шаг первый (приоритетные операции * и /)
for (int i=0; i<len; i++) //идём от начала до конца строки
{
                  if 
(step==2&&(str[i]=='*'||str[i]
{
                              
                              
                              
                              
                              
balance--; //чтобы дойти
//до нужного места слева
            if(((str[j]=='*'||
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
                              
Информация о работе Разбор строкового выражения. Алгоритм Рутисхаузера