В связи с тем, что у меня сегодня неожиданно так выпал выходной я хочу написать о одной безделушке, которую я привел затем в качестве наглядного примера. Так сказать для того, чтобы не потерялась, да и сам код довольно интересен. Итак, задача: необходимо искать x в выражении A[?]B=C, где на месте знака вопроса может находится знак операции, а x может находится везде, где ему заблагорассудится.

RUBBABU 13606 nabor arifmetika iz kauchuka Простая арифметика

Ну а реализация программы до боли простая. Но зато интересно потом смотреть, как она умеет считать. Хоть и детские примерыicon wink Простая арифметика

Итак, для того чтобы решить нашу задачу, нам необходимы всего две функции:

  • strtok
  • strstr

Первая разбивает строку на подстроки с помощью разделителя. Разделителем может быть и строка символов (каждый из них может разбивать строку на подстроки). Вторая же функция ищет подстроку в строке. Ну вот все механизмы и описаны. Остается самое забавное: связать все это в единую программу.

#include 
#include 
#include 
#include 
int main()
{
        char szBuffer[80];
        char *var1,*var2,*var3,o;

        while(1)
        {
                printf("\nEnter equals [A(oper)B=C where A|B|C=x] or q for exit: ");
                gets(szBuffer);
                if(szBuffer[0]=='q')
                        break;

                if(strstr(szBuffer,"+"))
                        o = '+';
                else
                if(strstr(szBuffer,"-"))
                        o = '-';
                else
                if(strstr(szBuffer,"*"))
                        o = '*';
                else
                if(strstr(szBuffer,"/"))
                        o = '/';

                var1 = strtok(szBuffer,"+-*/");
                var2 = strtok(NULL,"+-*/=");
                var3 = strtok(NULL,"=");

                if(var1[0]=='x')
                {
                        if(o=='+')
                                printf("%.2f",atof(var3)-atof(var2));
                        else
                        if(o=='-')
                                printf("%.2f",atof(var3)+atof(var2));
                        else
                        if(o=='*')
                                printf("%.2f",atof(var3)/atof(var2));
                        else
                        if(o=='/')
                                printf("%.2f",atof(var3)*atof(var2));
                }
                else
                if(var2[0]=='x')
                {
                        if(o=='+')
                                printf("%.2f",atof(var3)-atof(var1));
                        else
                        if(o=='-')
                                printf("%.2f",atof(var1)-atof(var3));
                        else
                        if(o=='*')
                                printf("%.2f",atof(var3)/atof(var1));
                        else
                        if(o=='/')
                                printf("%.2f",atof(var1)/atof(var3));
                }
                else
                if(var3[0]=='x')
                {
                        if(o=='+')
                                printf("%.2f",atof(var1)+atof(var2));
                        else
                        if(o=='-')
                                printf("%.2f",atof(var1)-atof(var2));
                        else
                        if(o=='*')
                                printf("%.2f",atof(var1)/atof(var2));
                        else
                        if(o=='/')
                                printf("%.2f",atof(var1)/atof(var2));
                }
        }

        return 0;
}

Конечно же, программа до бесконечности проста, но она забавнаicon biggrin Простая арифметика. Ну и есть некоторый минус: к примеру, унарный минус будет сбивать программу с толку. И это никаким образом нельзя назвать полезной программой. Больше сказать, её можно назвать как программу, демонстрирующую работу языка C со строками. И оптимизировать ее можно по дикому: printf к примеру при выводе ответа вынести в конец, и т.д. и т.п.

tt twitter big4 Простая арифметика tt digg big4 Простая арифметика tt facebook big4 Простая арифметика tt gmail big4 Простая арифметика tt myspace big4 Простая арифметика tt reddit big4 Простая арифметика

Оставить комментарий

CAPTCHA изображение
Обновить изображение
*

RSS-подписка NIG Twitter-подписка NIG

Метки
Друзья
Блог линуксоида Программы для диагностики компьютера
Супер Pixel
Убивалка флешаБэкконект шелл. Часть вторая.Бэкконект шелл. Начало.НАМ для деления чиселПростая арифметикаПередача файлов. Часть третья. Клиент.Dll injectionСканер портовКодировка текста в BMPРухнул на два дняПередача файлов. Часть вторая. Сервер.Поворот и BMPCRC32 суммаBMP форматфайловые вирусыассемблер, строкиАссемблер и матрицапримеры ассемблерМногопоточное программированиеАрхитектура клиент — серверРаздача ICQПишем шуткупишем паукаПривет от ДжеймсаОбход firewallЗагрузка картинок на Gyazo, прямо из ThunarКейлоггер 3Плюшки в контекстном меню Thunarc по сетиКейлоггер 2КейлоггерСкачать Ассемблер!VirusCheckerОтморозки мешают жить ?! Не проблемма !Cкрипты для взлома аккаунтов QIPWinAPI. Работа с файлами. Часть третья. ЧтениеDlink exploitБрут сайта etxt.ruКрасивая раскладка клавиатуры в GnomeМои безделушки на PerlКак запускать Perl скрипты под WindowsБрутфорс партнёрки ZipCoinПарсер upwap.ruИзменения в блогеЧудо ЗаливалкаСкрипт для загрузки файлов на Zalil.ruЯндекс «чоткий» поисковик!WinAPI. Работа с файлами. Часть вторая. ЗаписьWinAPI. Работа с файлами. Часть первая. ПоискПолучение MD5 хеша средствами C++Что нам стоить letitfile.com забрутить?WarCraft III запуск под LinuxЭнтропия файлаWinsock и C++. Мини прокси. Часть |\\/. Завершающая.Перепилил чекер для 4gameЧекер акаунтов YoupornCMailSend v 1.1. Отправка почы без проблемСлучайные числаWinsock и C++. Часть |||. smtp монстр.Брутфорс LetitFile.comИспользование X-Forwarded-For, для обмана веб-сервера, подмена IP подручными средствамиДело было вечером, делать было нечего…Мысли о аудио сервереПарсер ников из твиттераКонец школоло…Perl+Linux. Заметка первая (Удобный Paste bin).Бэкконект шелл.E-MAIL + winsocket + Cpp. Сложно?winsock и C++. Часть ||. Атака клоунов.C++ резолвинг адресаPerl, анализ HTML кода и определение CMSМатематика в C++winsock и C++