Форум программистов, компьютерный форум CyberForum.ru

Небольшое тестовое задание в финской компании. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Маленькая задачка. http://www.cyberforum.ru/cpp-beginners/thread351869.html
Дано действительное число h. Выяснить, имеет ли уравнение ax2 + bx + c = 0 действительные корни, если a=sqrt((abs(sin(8*h))+17)/(pow((1-sin(4*h)*cos(h*h)+(18*18)),2))) b=1-sqrt(3/3+abs(tan(a*(pow(h,2)))-sin(a*h))) c=a*pow(h,2)*sin(b*h)+b*(h*h*h)*cos(a*h) Если действительные корни существуют, то найти их. В противном случае ответом должно служить сообщение, что действительных корней нет.
C++ Потоки Пытаюсь создать поток #include<windows.h> #include<iostream> #include <stdio.h> #include <process.h> #include <fstream> using namespace std; WIN32_FIND_DATAA FindFileData;//структура файла FILE *stream; http://www.cyberforum.ru/cpp-beginners/thread351846.html
Задачи по С++ C++
Здравствуйте уважаемые форумчане. Необходимо решить три задачи, нарисовать алгоритм в виде блок схемы и комментарии написать, в общем, всё по порядку: Задача № 1 Определить, встречается ли введённая цифра среди первых трёх цифр дробной части заданного вещественного числа. Задача № 2 Составить алгоритм и программу вычисления выражения http://s54.***********/i146/1109/d2/c954bc6d9df7.png ...
C++ Методом Гаусса решить систему n линейных алгебраических уравнений
Помогите пожалуйста написать на с++ методом Гаусса решить систему n линейных алгебраических уравнений. Отсюда нашла именно ту тему там есть один код, он у меня нормально выходит. Только проблема в том что не могу разобрать код. помогите разобрать?! #include <iostream> #include <iomanip> void swap(double &a, double &b) { double temp = a; a = b; b = temp; }
C++ Какой учебник посоветуете мнедля изучения c++. http://www.cyberforum.ru/cpp-beginners/thread351802.html
Здравствуйте я новичек на этом форуме и вообще в c++. Какой учебник посоветуете мнедля изучения c++. (Я скачал wxdevcpp_7.3.1 )
C++ Время работы программы (алгоритма) не получается посчитать время работы алгоритма программы! #include <iostream> using std::cout; using std::cin; using std::endl; #include <cstdlib> using std::rand; using std::srand; подробнее

Показать сообщение отдельно
villu
202 / 202 / 4
Регистрация: 06.08.2011
Сообщений: 600
Записей в блоге: 1
17.09.2011, 16:45  [ТС]     Небольшое тестовое задание в финской компании.
Päivää!
В аттаче мой вариант. Как тут кто-то верно заметил -- парсер прост, как машина "бреинфак".

Далее описание. Длинное. Можно не читать.
------------
код достаточно корявенький и длинный (ажна 3 блока копипасты кстати этим объясняется размер исходника + еще отступы - пробелы). Сейчас бы сделал все гораздо меньше.
Никаких деревьев. Все делается одним большим циклом по строке и пишется в другую строку (которая передается как параметр функции).
Из особенностей:
длина входной строки не ограничена
длина выходной строки ограничена и парсер заканчивает свою работу, при достижении конца этой строки (это можно отменить флагом в параметрах).
При парсинге не используются сторонние функции вообще.
Правила:
- переменная начинается с символа $ либо любого другого, переданного функции.
- переменная отдается в функцию со всеми параметрами. Функция должна вернуть C-строку, либо 0.

далее то, что выходит за рамки изначального задания и делалось джаст фо лулс + еще для использования в одном проектике.

- переменные (у меня они называются макросы) могут встречаться в любой части строки, в том числе в именах других макросов и в параметрах других макросов.
C
1
$macroname($pamarasmacro(), param2,,,)
тут сначала выполнится $paramasmacro() , потом колбеку придет имя макро с именем macroname и 5ю параметрами (3 последние пустые, первый тоже может быть пустой, если paramasmacro ничего не вернет).
C
1
$mac$t()roname($pamarasmacro(), param2,,,)
тоже валидная строка. используется динамическое получение имени макроса.

- Последовательности:
[] как и предполагалось -- повторение строки, но с течением времени заменил немного значение.
Во-первых цикл всегда выполняется минимум 1 раз то есть [!]{0} вернет !, а не ничего.
во-вторых цикл - это реальный цикл. и если я в строке укажу [$conter()]{5} то колбек будет дернут 5 раз. и каждый раз может вернуться разное значение:
C
1
"this is test: [ counter()]{5}!" = "this is test:  1 2 3 4 5!"
в аттаче в main.c есть пример таблицы умножения:
C
1
char mul_table[] = "$set(max, 13)\\n[[$(multiply) ]{$(max)}\\n]{$(max)}\\n";
Результат:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
    1     2     3     4     5     6     7     8     9    10    11    12    13 
    2     4     6     8    10    12    14    16    18    20    22    24    26 
    3     6     9    12    15    18    21    24    27    30    33    36    39 
    4     8    12    16    20    24    28    32    36    40    44    48    52 
    5    10    15    20    25    30    35    40    45    50    55    60    65 
    6    12    18    24    30    36    42    48    54    60    66    72    78 
    7    14    21    28    35    42    49    56    63    70    77    84    91 
    8    16    24    32    40    48    56    64    72    80    88    96   104 
    9    18    27    36    45    54    63    72    81    90    99   108   117 
   10    20    30    40    50    60    70    80    90   100   110   120   130 
   11    22    33    44    55    66    77    88    99   110   121   132   143 
   12    24    36    48    60    72    84    96   108   120   132   144   156 
   13    26    39    52    65    78    91   104   117   130   143   156   169
думаю понятно, откуда взялось 13. $set(max, 13)

Циклы могут быть вложенные (как в примере выше).

{} - итератор цикла [] либо последнего символа.
C
1
$macro(){5}
это не повторение значения макроса 5 раз, а повторение последнего символа результата.

esc последовательности:
такие последовательности идут после символа \. все неизвестное парсер пропускает как есть \i = \i
можно задать код символа в нескольких разных системах счисления:
C
1
2
3
4
5
6
\123 - 10
\xF0 - 16
\01234742 - 8
\B010010010  - 2
\T12210012 - 3 
\q12301230123 - 4
Кстати {} так же может принимать такие же значения. {xF} = {15}
----
еще про макросы:
общая длина макроса с параметрами задается в заголовке дефайном. Количество параметров там же

параметры отделяются друг от друга пробелами, либо запятыми. параметр в "это цельный параметр" - цельные параметры.

Маросы могут вернуть строку, могут вернуть другие макросы и вообще любые последовательности. (да, можно получить рекурсию )
....
Еще особенности: для парсера не существует ошибок. любую строку он съест и сделает, что сможет.

Все символы и возможности можно менять соответсвующими дефайнами. например скобки сделать <> вместо ()

На этом все. если вдруг что непонятно отвечу.
Вложения
Тип файла: zip rep-macro.zip (11.2 Кб, 13 просмотров)
 
Текущее время: 23:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru