Детальное описание используемых методов
Рассмотрим детальное описание используемых методов на примере задачи реализации калькулятора при помощи метода обратной пользовательской записи. В программе вводится строка символов Пример: (1+1)/2+12/(8/2)= Программе необходимо оценить состав строки. Это реализуется через различные циклы, которые определяют, является ли i-символ цифрой или знаком, затем скомпоновывают цифры в числа и конечным результатом этих действий, являются 2 массива. Пример:
Далее программа должна распознать все выражения в скобках и преобразовать их в числовое значение. Пример: …+(1+2/2)/… à…+2/… Для решения данной задачи, необходимо использовать сдвиги (детально описано в разделе 3.5) Когда же все скобки будут преобразованы в числовые значения, программа начинает преобразовывать все выражения "*" - умножение, затем "/" - деление, затем "+" - сложение и, наконец "-" – вычитание в числовые значения. Пример: И в конце программа выдаёт ответ. Детально работа функций описана в следующем разделе.
Описание программы Постановка задачи
С клавиатуры вводится математическое выражение в виде строки символов а) числовых – 1234567890 и б) специальных */+-()= . В конце выражения ставится ‘=’ или ничего(/0 – терминатор ноль). Программа оценивает выражение и если ошибок нет - выдаёт целочисленный результат.
Интерфейс пользователя
В начале программы выводится диалог выбора режима работы: отладочный или простой:
Do you want to look the debugging information? ( y / Any key ) Если же будет нажата любая клавиша кроме ‘y’, то включится простой режим работы. Отладочный режим рассматриваться не будет. Далее показывается логотип и информация об авторе. После всего этого выводится строка нумерации расчёта:
<<<-------------[ Расчёт N :1 ]------------->>> И на следующей строке пользователь пишет некоторое выражение:
1+1+(555/111)/5+(3/3+6/6+9/9)=
Или
1+1+(555/111)/5+(3/3+6/6+9/9) Программа оценит выражение и в случае отсутствия ошибок, выдаст целочисленный результат:
---------------------------- OTBET = 10 ---------------------------- и выведет диалог повторения:
3 AHOBO ? ( Any key / n ) Если пользователь нажмёт ‘n’ или ‘N’, то работа программы завершится. Если же будет нажата любая другая клавиша, то цикл повторится:
<<<-------------[ Расчёт N :2 ]------------->>> И так далее. Вывод результатов проиллюстрирован в приложении 2. Детальное описание основной функции Перейдём непосредственно к рассмотрению методов решения данной задачи. В программе вводится строка символов, например : (1+1)/2+12/(8/2)= Программа сканирует данную строчку с помощью scanf("%s",&S); Далее необходимо определить состав строки: for (i=0; i<(m+1); i++){ if (S[i]=='1'){ buf[i]=1;l++;} else if (S[i]=='2'){ buf[i]=2;l++;} else if (S[i]=='3'){ buf[i]=3;l++;} else if (S[i]=='4'){ buf[i]=4;l++;} else if (S[i]=='5'){ buf[i]=5;l++;} else if (S[i]=='6'){ buf[i]=6;l++;} else if (S[i]=='7'){ buf[i]=7;l++;} else if (S[i]=='8'){ buf[i]=8;l++;} else if (S[i]=='9'){ buf[i]=9;l++;} else if (S[i]=='0'){ buf[i]=0;l++;} else if (l!=0)
С помощью функции ChartoInt преобразуем набор цифр в число, пример: 1,2,4 в 124.
a[iKol]=ChartoInt (p,i,l); iKol++; //счетчик кол-ва чисел l=0;//обнуление счетчика длинны числа }}
Далее проводится вылавливание знака
switch (S[i]) { case '+' :b[k]=1; k++; break; case '-' :b[k]=2; k++; break; case '*' :b[k]=3; k++; break; case '/' :b[k]=4; k++; break; case '\0' : break; //Завершение сканирования если '\0' case '(' :b[k]=5; u1++; k++; break; case ')' :b[k]=6; u2++; k++; break; default : break;}
Если встречаем "=" то завершаем сканирование
if(S[i]=='=') { break;} // Завершение сканирования
Если количество открытых скобок не равно количеству закрытых скобок то выход
if(u1!=u2){goto m1;} // Проверка на кол-во скобок
Если всё нормально, то используем функцию Scobka Scobka(a1,b1,iKol,k);
После расчётов выражений в скобках продолжаем расчёт в функции Sumin
c=Sumin(a1,b1,iKol,k);
Получаем результат и переводим его в целое значение s=(int)c;
И выводим результат
printf("\r OTBET=[ %i ]\n",s);
Рассмотрим работу функций: ChartoInt , Scobka , Sumit .
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Почему стероиды повышают давление?: Основных причин три... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (211)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |