Подскажите пожалуйста, какой небольшой, но характерный проект создать для демонстрации моего знания C++ (Microsoft Visual C++). Я хотел бы разместить такое приложения на своей интернет страничке и сделать доступным вместе с исходными кодами (подобное я уже сделал для ASP, когда-то при устройстве в одну фирму меня попросили сделать небольшую программку и теперь я ее могу использовать для демонстрации). По адресу http://www25.brinkster.com/finchenko я разместил интернет страничку, которую использую для поиска работы. Я декларирую знание C++, а проекты, которые я создавал, представить не могу, т.к. они остались в собственности газпрома и забрать их (а тем более исходные коды я не имел права). Скорее всего нужно зделать ActiveX компонент с поддержкой COM+, но фантазия моя уже иссякла. Помогите советом, а может быть кто-то уже подобное делал.
Здравствуйте Финченко Юрий, Вы писали:
ФЮ>Подскажите пожалуйста, какой небольшой, но характерный проект создать для демонстрации моего знания C++ (Microsoft Visual C++). Я хотел бы разместить такое приложения на своей интернет страничке и сделать доступным вместе с исходными кодами (подобное я уже сделал для ASP, когда-то при устройстве в одну фирму меня попросили сделать небольшую программку и теперь я ее могу использовать для демонстрации). По адресу http://www25.brinkster.com/finchenko я разместил интернет страничку, которую использую для поиска работы. Я декларирую знание C++, а проекты, которые я создавал, представить не могу, т.к. они остались в собственности газпрома и забрать их (а тем более исходные коды я не имел права). Скорее всего нужно зделать ActiveX компонент с поддержкой COM+, но фантазия моя уже иссякла. Помогите советом, а может быть кто-то уже подобное делал.
ФЮ>С уважением ФЮ>Юрий Финченко ФЮ>finchenko@bezeqint.net
Если устроит маленькое, но умное, то посмотри на http://www.itasoftware.com/careers/programmers.php первый 2-е задачи. По крайней мере когда я 9-ть 9-ток писал, получился довольно таки сильный C++ код
Здравствуйте ZORK, Вы писали:
ZORK>Если устроит маленькое, но умное, то посмотри на http://www.itasoftware.com/careers/programmers.php первый 2-е задачи. По крайней мере когда я 9-ть 9-ток писал, получился довольно таки сильный C++ код
Сильный код? Может я чего не понимаю, но я бы решал так:
Пищется функция, которая принимает на входе массив чисел и
выдает другой массив, в котором находятся все возможные
варианты операций каждого из этих чисел с 9.
Изначально на входе у такой функции массив с 2-я элементами (+9 и -9).
на выходе, соответственно:
-9 * 9 = -81
-9 / 9 = -1
-9 + 9 = 0
-9 — 9 = -18
9 * 9 = 81
9 / 9 = 1
9 + 9 = 18
9 — 9 = 0
хм.. по-ходу унарный минус можно не учитывать. Итак, на выходе у нас
0,1,18,81
дальше подаем эти четыре числа снова на вход нашей
функции, получаем
0 * 9 = 0
1 * 9 = 9
18 * 9 = 162
81 * 9 = 729
0 / 9 = 0
1 / 9 = 1/9
18 / 9 = 2
81 / 9 = 9
0 + 9 = 9
1 + 9 = 10
18 + 9 = 27
81 + 9 = 90
0 — 9 = -9
1 — 9 = -8
18 — 9 = 9
81 — 9 = 72
1/9 смело выкидываем, потому как для получения целого числа ее нужно будет домножить,
как минимум, на 9, а симметричный такому вариант у нас гарантировано будет.
К 9-й девятке получится не более 4-в-восьмой степени, или 64к вариантов.
Если задача не для калькуляторов, то вполне приемлимый расход ресурсов.
В самом деле, код совершенно
неправильный. Во-первых,
обрабатываются только скобки типа
(9+(9+(...)))
А нужно еще и
(9+9)+(...)
т.е. придется переписать функцию
чтобы та принимала две кучки
вариантов. Причем делить и вычитать
придется двойки из четверок и
четверки из двоек.
И дроби. Все-таки их нельзя их
выкидывать.
9/9/(9+9) дает-таки целый результат.
придется хранить и числитель и знаменатель.
Да... Хорошо, что я не устраиваюсь на работу
к Zorkу, а то он бы меня не взял.
Здравствуйте Snax, Вы писали:
S>Да... Хорошо, что я не устраиваюсь на работу S>к Zorkу, а то он бы меня не взял.
Для сравнения, вариант который у меня получился, основаный на рекрурсивном вызове функций с сохранением состояния в объекте:
// Author: Alexey Zorkaltsev (a.k.a. ZORK)
// Date: Dec 1, 2001
// Description:
// It's a solution of Nine 9s task from
// http://www.itasoftware.com/careers/programmers.php.
////////////////////////////////////////////////////////////#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <windows.h>
// Lets make it a little more generalconst unsigned int N = 9; // number of numbersconst unsigned int V = 9; // what is the numberchar sV[2] = "X";
class Braces {
public:
Braces() :
_n(0), _p(0), _s(0), _left(NULL), _right(NULL) {}
~Braces() {
delete _left;
delete _right;
}
void init(int n) {
_n = n;
_mid = (_n + 1) / 2;
_s = -1;
}
bool next(double &val) {
// Back to the point after last returnswitch (_s) {
case 1:
goto S1;
case 2:
goto S2;
case 3:
goto S3;
case 4:
goto S4;
case 5:
goto S5;
case 6:
goto S6;
case 10:
return false;
}
if (_n == 1) {
_s = 10;
val = V;
return true;
}
// Beginningif (_left == NULL) {
_left = new Braces();
_right = new Braces();
}
// Before (including center) positionsfor (_p = 1; _p <= _mid; ++_p) {
// All possible left values
_left->init(_p);
while (_left->next(_leftVal)) {
// All possible right values
_right->init(_n - _p);
while (_right->next(_rightVal)) {
// All possible operations
val = _leftVal + _rightVal;
_s = 1; return true; S1:;
val = _leftVal - _rightVal;
_s = 2; return true; S2:;
val = _leftVal * _rightVal;
_s = 3; return true; S3:;
if (fabs(_rightVal) > 1e-10) {
val = _leftVal / _rightVal;
_s = 4; return true; S4:;
}
}
}
}
// After center positionsfor (; _p < _n; ++_p) {
// All possible left values
_left->init(_p);
while (_left->next(_leftVal)) {
// All possible right values
_right->init(_n - _p);
while (_right->next(_rightVal)) {
// All possible operations
val = _leftVal - _rightVal;
_s = 5; return true; S5:;
if (fabs(_rightVal) > 1e-10) {
val = _leftVal / _rightVal;
_s = 6; return true; S6:;
}
}
}
}
return false;
}
void show()
{
if (_s == 10)
printf(sV);
else {
printf("(");
_left->show();
switch (_s) {
case 1:
printf("+"); break;
case 2:
case 5:
printf("-"); break;
case 3:
printf("*"); break;
case 4:
case 6:
printf("/"); break;
}
_right->show();
printf(")");
}
}
protected:
int _n; // number of 9es in the bracesint _mid; // middleint _p; // current positionint _s;
Braces* _left;
double _leftVal;
Braces* _right;
double _rightVal;
};
int main()
{
int t1 = GetTickCount();
sV[0] = '0' + V;
Braces b;
for (int i = 0; i < 65000; ++i)
{
if (i % 1000 == 0)
printf("i = %d\n", i);
b.init(N);
double val;
while (b.next(val)) {
if (val == i) {
printf("%d - ", i); b.show(); printf("\n");
goto NumberWasFound;
}
}
break;
NumberWasFound:; // check next number
}
int t2 = GetTickCount();
if (i < 65000)
printf("Found %d\n", i);
else
puts("Number wasn't found!");
printf("Spent time: %f sec\n", double(t2 - t1) / 1000);
puts("\nPress Any Key...");
getch();
return 0;
}
Правильный ответ — 195
На случай, если кто-нить захочет сказать что этот код недостаточно оптимизирован, скажу, что правильный ответ находится на машине 1GHz, 256M с Windows 2000, за 20 сек., так что дальнейшая оптимизация не требовалась.
Ну вот. Опять поторопился .
Если выкидывание повторов перетищить из SearchForMeaningOfLife
в main, то должно ускорится еще раза в два. Хотя и так
быстрее, чем у Алексея.
Здравствуйте Финченко Юрий, Вы писали:
ФЮ>Подскажите пожалуйста, какой небольшой, но характерный проект создать для демонстрации моего знания C++ (Microsoft Visual C++). Я хотел бы разместить такое приложения на своей интернет страничке и сделать доступным вместе с исходными кодами (подобное я уже сделал для ASP, когда-то при устройстве в одну фирму меня попросили сделать небольшую программку и теперь я ее могу использовать для демонстрации). По адресу http://www25.brinkster.com/finchenko я разместил интернет страничку, которую использую для поиска работы. Я декларирую знание C++, а проекты, которые я создавал, представить не могу, т.к. они остались в собственности газпрома и забрать их (а тем более исходные коды я не имел права). Скорее всего нужно зделать ActiveX компонент с поддержкой COM+, но фантазия моя уже иссякла. Помогите советом, а может быть кто-то уже подобное делал.
ФЮ>С уважением ФЮ>Юрий Финченко ФЮ>finchenko@bezeqint.net
Напиши почтового клиента (POP3 хотябы). Отправка, получение сообщений, аттачменты, кодировки и т.д. и т.п.
Я сам когда-то писал, в принципе ничего сложного, но гемор тот еще...
Все гениальное — просто
Re[2]: Тестовый проект
От:
Аноним
Дата:
19.11.03 22:19
Оценка:
Здравствуйте, flyker, Вы писали:
F>Здравствуйте Финченко Юрий, Вы писали:
ФЮ>>Подскажите пожалуйста, какой небольшой, но характерный проект создать для демонстрации моего знания C++ (Microsoft Visual C++). Я хотел бы разместить такое приложения на своей интернет страничке и сделать доступным вместе с исходными кодами (подобное я уже сделал для ASP, когда-то при устройстве в одну фирму меня попросили сделать небольшую программку и теперь я ее могу использовать для демонстрации). По адресу http://www25.brinkster.com/finchenko я разместил интернет страничку, которую использую для поиска работы. Я декларирую знание C++, а проекты, которые я создавал, представить не могу, т.к. они остались в собственности газпрома и забрать их (а тем более исходные коды я не имел права). Скорее всего нужно зделать ActiveX компонент с поддержкой COM+, но фантазия моя уже иссякла. Помогите советом, а может быть кто-то уже подобное делал.
ФЮ>>С уважением ФЮ>>Юрий Финченко ФЮ>>finchenko@bezeqint.net
F>Напиши почтового клиента (POP3 хотябы). Отправка, получение сообщений, аттачменты, кодировки и т.д. и т.п. F>Я сам когда-то писал, в принципе ничего сложного, но гемор тот еще...
подскажи как ты кирилицу отображал?
Re: Тестовый проект
От:
Аноним
Дата:
20.11.03 07:17
Оценка:
Здравствуйте, Финченко Юрий,
Посмотри тестовые задачи в Аэлите,
но в свете предыдущего обсуждения,
наверное, слишком просто.
Здравствуйте, Финченко Юрий, Вы писали:
ФЮ>Подскажите пожалуйста, какой небольшой, но характерный проект создать для демонстрации моего знания C++ ФЮ>Скорее всего нужно зделать ActiveX компонент с поддержкой COM+, но фантазия моя уже иссякла. Помогите советом, а может быть кто-то уже подобное делал.
Когда — то я хотел сделать проект для тех же целей, что и ты. Но времени всё нет. Да и лень.
Увидел это задание в форуме, но найти где не могу, то ли поиск глючит, то ли удалена ветка. Поэтому ссылку на сообщение не дам, а напишу прямо здесь.
Предлагается создать клиент-серверную систему со следующей архитектурой
Компоненты системы включают:
1. Log Server – COM сервер, реализующий интерфейс (ы) для получения трассировочных сообщений от произвольного числа клиентов.
§ Log Server должен быть реализован как in-proc COM server, но клиенты должны создавать Log Server как local COM server на машине клиента.
§ Log Server должен всегда работать в единственном экземпляре и обслуживать всех клиентов.
§ Log Server должен быть реализован с применением ATL, без испoльзования MFC.
§ Log Server должен быть Free Threaded.
§ Log Server должен работать в двух режимах. В каком режиме он запустится должно определяться каким-то ключом в Registry Кроме того, интерфейс реализуемый Log Server, должен предусматривать возможность перелючения между режимами работы в во время выполнения по запросу клиента с запоминанием нового установленного состояния Log сервера в реестре.
§ Silent mode – без UI. Все приходящие трассировочные сообщения записываются в простой текстовый файл с префиксом при каждом сообщении, позволяющим идентифицировать, от какого процесса оно пришло.
§ UI mode — Log Server запускается как обычное SDI приложение с возможностью просмотра и редактирования (добавление произвольных комментариев пользователем к тексту трассировки отображаемому в окне). Трассировка вместе с со всеми пользовательскими комментариями при этом должна сохраняться в файле автоматически без каких либо команд от пользователя.
При работе в UI mode все новые приходящие сообщения автоматически добавляются и могут быть сразу на лету просмотрены в конце лога в UI.
Клиенты могут быть написаны как на С/С++, так и на VB или любом другом scripting language
2. Простенькая OCX отображающая часы в числовом виде (ходящие естественно) и имеющая возможность менять по запросу с клиента вид этих часов (ну например – менять цвет или фонт – что именно роли не играет). При изменении размера часов, они должны масштабироваться.
3. Dialog Client – Диалоговое приложение использующее Clock OCX для показа часов в своем поле диалога. Имеет команды позволяющие поменять вид часов в соответствии с возможностями ОСХ. Желательно реализовать этот компонент на VB.
4. MDI Client – MDI приложение, отображающее в каждом из своих child окон часы с используя Clock OCX. Должны предоставлять команды функционально аналогичные с Dialog Client позволяющую поменять вид часов раздельно в каждом MDI Child окне. При изменении размера MDI Child окна размер часов должен пропорционально изменяться.
Оба клиента должны писать в Log Server всю информацию о своей работе, включая сообщения о старте, остановке, изменению отображения часов и естественно все сообщения об ошибках и сбоях, которые могут возникнуть в run-time.
Суть Log Server в том, чтобы сохранять всю полученную на текущий момент информацию в файле даже в том случае, если все рухнуло.
Note: только не надо писать в лог трассировку о изменении времени каждые N секунд!
Требования к оформлению кода:
Должна быть венгерская нотация.
Все UI-строки должны браться из ресурсов.
Программа должна быть локализуема (компилироваться в ANSI/UNICODE, правильно работать с MBCS).
Числа не должны быть разбросаны по коду.
Должны быть комментарии (на английском).
: