Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Клуб профессиональных программистов :: Выпуск #67


Клуб профессиональных программистов "Весельчак У"
Информационная рассылка сайта и форума.  Выпуск No67 (2009-02-18).

Здравствуйте, уважаемые читатели!

Сегодня в нашем выпуске подборка наиболее интересных тем за последнюю неделю.




На форуме есть ссылка на видео о безумных прыжках с гор. Даже видео захватывает дух, а какого самим прыгунам! Для тех, кто не может смотреть в онлайне есть временная копия flv-файла.




  • Программирование
        • Имеется матрица смежности упорядоченного ориентированного графа (например, размерностью 9*9). 1 соответствует наличию дуги, 0 - ее отсутствием. Нужно вычислить
          С(2,1)
          С(3,2), С(3,1)
          С(4,3), С(4,2), С(4,1)
          С(5,4), С(5,3), С(5,2)
          ...................
          С(9,8), С(9,7), С(9,6)
          Максимальное кол-во значений С в каждой строке дается в условии (в данном случае макс. кол-во = 3). Т.е. сначала считается одно значение (в нашем случае С(2,1)), потом - 2 (С(3,2), С(3,1)), и т.д. пока не дойдем до макс. кол-ва значений (С(4,3), С(4,2), С(4,1)), которое сохраняется до конца расчетов (С(9,8), С(9,7), С(9,6)).
          С высчитывается по формуле: С(x,y) = количеству существующих ребер (i*j) при y<=i<x, j>=x. По матрице смежности
          С(x,y) равняется сумме значений матрицы смежности в прямоугольнике шириной (x-y) и длиной до конца матрицы, левый верхний угол которого - ячейка (y,x).
          В данном случае нужно явно использовать динамическое программирование. Вопрос в том, как оптимально использовать вычисления, проводимые ранее.
          Это является подзадачей при последовательной декомпозиции графа.
        • Собственно, вопрос написан в названии темы. Имеем элемент DataGridView, у него есть заполненные ячейки. Требуется чтобы по клику правой кнопкой мыши, выбиралась ячейка и выпадало контекстное меню. В свойствах, в категории RowTemplate есть категория ContextMenuStrip в котором можно указать имя контекстного меню, которое будет появляться в случае нажатия правой кнопкой на ячейке, однако выбора самой ячейки не происходит  :-/ Приходится жать левой кнопкой мыши на ячейке, а затем правой для неё чтобы выпало меню. Как то можно решить эту проблему?
        • Не подскажите, как организовать доступ на web.config, когда на htaccess он выглядет так:

          CODE
          <FilesMatch "^file\.rar$">
          Order Deny,Allow
          Deny from all
          Allow from 127.0.0.2 #1993276205
          </FilesMatch>

          То есть мне нужно для конкретного файла записать доступ только для определённых ИП.
          Windows Server 2008, IIS 7.0.
      • У меня есть сторонняя  длл(cboby.dll).Я ее хочу подключить к проекту.
        Пишу :
        #include “cboby.h”
        а он мне в ответ :Compiling...
        exe.cpp
        d:\c++\cheat\opengl32duo\exe.cpp(1) : error C2018: unknown character '0x93'
        d:\c++\cheat\opengl32duo\exe.cpp(1) : error C2006: #include expected a filename, found 'identifier'
        Error executing cl.exe.

        OpenGl32Duo.dll - 2 error(s), 0 warning(s)
      • Данна папка c:\\Documents\
        в папке находтя еще 2 папки и в тех папках по несколько файлов и может быть папки
        также могут быть файлы в c:\\Documents\

        Нужно составить прогр которая будет записавать все эти файлы и папки таким вот видом

        C:\\Document\
        C:\\Document\games           <at papki prost vdrug kto ne ponel:)
        C:\\Document\Progs
        C:\\Document\borland.exe
        C:\\Document\exploer.com

        C:\\Document\games 
        C:\\Document\games\FlatOut.exe
        C:\\Document\games\War2.exe
        C:\\Document\games\tekst.txt
        вот так



        вот примерн но не показывает такой путь(C:\\Document\ )(C:\\Document\borland.exe)и как сменить деректорию где он ищет?
        Код:
        #include <stdio.h>
        #include <dir.h>
        int main(void)
        {
           struct ffblk ffblk;
           int done;
           printf("Directory listing of *.*\n");
           done = findfirst("*.*",&ffblk,0);
           while (!done)
           {
              printf("  %s\n", ffblk.ff_name);
              done = findnext(&ffblk);
           }
           return 0;
        }
        • Тема такая - создать на основе TSрinEdet компонент, который позволяет вводить целые числа... бла-бла-бла.. вообщем, это всё я замутил, но препод сказал, что надо ещё сделать маску ввода, аналогично компаненту MaskEdet, как это сделать не пойму.
      • Определить степень интерполяционного полинома и рассчитать полином по интерполяционной формуле Ньютона. Основная часть проги написана. Я не знаю, как определять степень, по-моему это как-то связано вот с этой формулой Ньютона.

        Код:
        unit Unit1;

        interface

        uses
          Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
          Dialogs, StdCtrls, Grids;

        type
          TForm1 = class(TForm)
            StringGrid1: TStringGrid;
            Button1: TButton;
            Button3: TButton;
            Button4: TButton;
            Button5: TButton;
            Edit1: TEdit;
            Label1: TLabel;
            procedure Button1Click(Sender: TObject);
            procedure FormClose(Sender: TObject; var Action: TCloseAction);
            procedure FormCreate(Sender: TObject);
            procedure Button3Click(Sender: TObject);
                 private
            { Private declarations }
          public
            { Public declarations }
          end;

        var
          Form1: TForm1;
          xydata:array of array of real;
          pddata,cddata:array of real;

        implementation

        {$R *.dfm}

        procedure GetArray;
        Var i:word;
            n:integer;
        begin
        n:=strtoint(form1.Edit1.text);
        Setlength(xydata,n,2);
        for i:=1 to n do
        begin
        xydata[i-1,0]:=strtofloat(form1.Stringgrid1.Cells[0,i]);
        xydata[i-1,1]:=strtofloat(form1.Stringgrid1.cells[1,i]);
        end;
        end;

        procedure TForm1.Button1Click(Sender: TObject);
        Var n:integer;
        begin
        n:=strtoint(Edit1.Text);
        Stringgrid1.ColCount:=n+1;
        Stringgrid1.RowCount:=n+2;
        Stringgrid1.FixedCols:=0;
        Stringgrid1.Cells[0,0]:='x';
        Stringgrid1.Cells[1,0]:='y';
        end;

        procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
        Var tf:textfile;
            n:integer;
            i:word;
        begin
        n:=strtoint(edit1.Text);
        Assignfile(tf,'data.txt');
        Rewrite(tf);
        Writeln(tf,n);
        for i:=1 to n do
        begin
        Writeln(tf,Stringgrid1.Cells[0,i]);
        Writeln(tf,Stringgrid1.Cells[1,i]);
        end;
        Closefile(tf);
        end;

        procedure TForm1.FormCreate(Sender: TObject);
        Var tf:textfile;
            i:word;
            s:string;
            n:integer;
        begin
        n:=strtoint(Edit1.Text);
        Assignfile(tf,'data.txt');
        Reset(tf);
        Readln(tf,n);
        Stringgrid1.ColCount:=n+1;
        Stringgrid1.Rowcount:=n+2;
        For i:=1 to n do
        begin
        Readln(tf,s);
        Stringgrid1.Cells[0,i]:=s;
        Readln(tf,s);
        Stringgrid1.Cells[1,i]:=s;
        end;
        end;


        procedure RR(Order:byte);
        Var i:word;
            n:integer;
        begin
        n:=strtoint(form1.Edit1.text);
        if order>1 then
        begin
        Setlength(pddata,n-order+1);
        for i:=0 to n-order do
        pddata[i]:=cddata[i];
        end;
        Setlength(cddata,n-order);
        for i:=0 to n-order-1 do
        if order>1 then
        cddata[i]:=(pddata[i+1]-pddata[i])/(xydata[i+order,0]-xydata[i,0])
        else
        cddata[i]:=(xydata[i+1,1]-xydata[i,1])/(xydata[i+1,0]-xydata[i,0]);
        end;



        procedure TForm1.Button3Click(Sender: TObject);
        Var i,j:word;
            n:integer;
        begin
        n:=strtoint(Edit1.Text);
        GetArray;
        for i:=2 to n+1 do
        begin
        RR(i-1);
         for j:=1 to n-i+1 do
         Stringgrid1.Cells[i,j]:=floattostr(cddata[j-1]);
         end;
        end;

        end.
      • Делаю программу для проигрывания муз.файлов. для этого использую BassPlayer 1.92 из torry.ru.
        MP3 файлы проигрывает а миди нет. почему?

        Дайте рабочий пример плз. :)
      • Выяснилось, что не верно формируются  значение субконто. После продолжительных обдумыванией
        пришли к выводу, что:

        Для корректного заполнения значений субконто:
        Контрагент UCS кредитные карты должен начинаться с " UCS " - поиск идет по начальным буквам.
        Код товара в справочнике "Номенклатура" должен быть "Ц00000001" - тогда правильно заполнится субконто "Вид номенклатуры" для субсчетов счета 90
        а у нас было наоборот были  Кредитные карты UCS и Ц00000001 был 00000001
        Вопрос?
        После исправлений:
        1) где и как это отразится?
        2) ничего , что изменятся все отчеты за предыдущие периоды?
        3) имеет ли это отношение к книге продаж
      • Подскажите где изменить сумму льготы по НДФЛ? По логике, это должно быть в справочнике "Налоги и отчисл", но ничего подобного я там не нашла
      • Как сделать так чтобы по кнопке заполнить автоматически заполнялся весь Табель, со всеми часами работы сотрудника, перелопатила весь модуль, дает только основные часы, или только вечерние, или только ночные, предварительно очистив все предыд. данные.
      • По средствам какой проги можно делать стили для 1с и как их внедрять туда?Заранее спасибо!
      • Уважаемые коллеги. У меня такой вопрос: как скопировать файл на локальный принтер. На сетевой копируется просто: ФС.КопироватьФайл(Путь+Файл,"\\сервер\сетевое имя принтера"). Не могу нигде найти как копировать на принтер, если он не доступен в сети.
      • Хотелбы спросить Вас о Программном комплексе "Альфа-Авто", разработанном на платформе "1С:Предприятие 8.0"
        Может быть кто нибудь из Вас с ним сталкивался, и есть ли среди вас кто сможет выложить этот программный продукт для скачивания!!!
        Уже везде искал никак найти немогу. Мне любую версию для тестирования нужна желательно чтобы была сетевой так как тестинг будет проводится на нескольких компьютерах. (Самое главное что бы версия была не демо!!!)
        • Конфигурация, к примеру, разработана,но перед тем как ее использовать, нужно задать некоторые параметры:
          Номер,адрес e-mail, логин-пароль почты,серверы исх и вход, и т.п.
          Т.е. во время первого запуска конфигурации задаем параметры.
          Правами доступа потом сделаем редактирование только для админа, а для пользователя только просмотр.
          И после задания нужных параметров разработанная конфигурация подхватит и будет использовать эти заданные параметры.
        • Я учусь программировать в 8-ке, такой вопрос - нужно, что бы в данной процедуре отрабатывалась уникальность значений xls файла (по столбцу 1, к примеру), т.е. в справочник два раза не попадала одна и та жа позиция.
          Процедура ЗаполнитьСпрСервисЦентрыИзЭксельНажатие(Элемент)
             ConExcel=ПолучитьCOMОбъект("d:\Сервисы.xls");
             Спр=Справочники.СервисЦентры;
             i=2;
             Пока СтрДлина(ConExcel.Sheets("Сервисы").Cells(i,2).Value)>0 Цикл
                НовыйЭлемент=Спр.СоздатьЭлемент();
                z=ConExcel.Sheets("Сервисы").Cells(i,2).Value;
                НовыйЭлемент.Наименование=ConExcel.Sheets("Сервисы").Cells(i,2).Value;
                НовыйЭлемент.НомерСЦ=ConExcel.Sheets("Сервисы").Cells(i,1).Value;
                НовыйЭлемент.Записать();
                i=i+1;
                КонецЦикла;
          КонецПроцедуры
          Или, если есть более грамотное решение по заполнению справочников, тоже интересно узнать профессиональное мнение, спасибо!
  • Операционные системы
      • Мне нужно менять строку useragent-a для эксплорера, но простых и адекватных методов я что-то найти не могу.

        1-й вариант:  Замена строки в реестре. Описано, например, здесь: http://www.pc1news.com/changing-the-internet-explorer-user-agent-string-799.html

        Это, конечно, достаточно простой вариант, но он мне не совсем подходит, потому что полностью сделать строку такую как нужно не получается - эксплорер сам форматирует её таким образом, что после названия браузера дополнительные параметры идут в скобках и сделать, скажем, из эксплорера файрфокс не получится - у файрфокса параметры в конце строки идут без скобок и добиться такого эффекта у меня пока никак не получается.

        2-й вариант: Использовать InternetSetOption(), но эта функция меняет юзерагента только для конкретного соединения, которое было открыто с помощью InternetOpen(). Мне такой вариант тоже не подходит, ибо он совсем про другое.

        Скажите, может я что-то неправильно делаю? Может всё-таки как-то можно заставить эксплорер показывать произвольно отформатированную строку?

        Для примера продемонстрирую две строки юзерагента:
        IE7:
        Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

        Заметьте, строка оканчивается скобкой! Получается, что всё, что идет после Mozilla/4.0 находится в скобках.

        FireFox:
        Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208 FireFox/3.0.1

        А здесь, как ни странно, скобок нет.

        Теперь вопрос на засыпку. Можно ли, не прибегая к каким-то особо-экстремальным методам, сделать так, чтобы эксплорер показывал строку юзерагента, например, для файрфокса, идентичную указанной выше?
        У меня это сделать не получается - эксплорер упорно заворачивает все параметры в скобки :(

        Если кто-то когда-то сталкивался с этой проблемой и знает её решение, то подскажите мне, пожалуйста, как это сделать.
  • Направления программирования
      • Делаю сейчас девас на at91sam7, связь с пк через усб хид, возникла такая проблема,
        после получения девайсом установочного пакета и его разбора определяю что хост
        запрашивает девайс дескриптор отправляю его, первые 8 байт он принимает и шлет
        подтверждение, а вот следующую порцию байтов не принимает(нет подтверждения) .
        Установил программу для просмотра usb порта, но она позволяет просматривать обмен только
        после конкурирования устройства, а проблема возникает в процессе обмена дискрипторами,
        отсюда такой вопрос , возможно просмотреть что происходит в усб на низком уровни,
        какие байты получаются какие отправляются ? Может существуют специальные программы?   
      • Есть драйвер-фильтр. Задача такова: узнать имя текущего пользователя. Из этого вытекает равносильные вопросы:
        как можно из драйвера выполнить программу (может быть есть какой нибудь аналог ShellExecute)
        или как в самом драйвере узнать имя текущего пользователя?
      •   Написал драйвер, который должен считывать с USB устройства 8 байт данных. После подключения устройства драйвер создает символьную ссылку на устройство (usb_testdrv).
          Из пользовательского приложения функция QueryDosDevice(nil, P, BufSize) возвращает в буфер P список устройств, в котором присуствует и мое, однако при попытке открыть его:
        hDevice:= CreateFile('\\.\usb_testdrv',
                     GENERIC_READ or GENERIC_WRITE,
                     0,nil,
                     OPEN_EXISTING,
                     FILE_ATTRIBUTE_NORMAL,
                     0
                   );
        происходит ошибка, GetLastError возвращает, что не удается найти указанный файл.
          Я так полагаю какая-то ошибка в драйвере, регистрации символного имени или все же я не правильно обращаюсь к драйверу??
      • Скажите пожалуйста, как в драйвере-фильтре файловой системы поймать идентификатор процесса, производящего действие, например чтение файла? Это нужно чтобы подменивать путь и неявно заставлять читать файл, лежащий в другом месте ))
      • Кратко написанием ПО такого уровня начал заниматься буквально на днях, естественно без опытов не куда. Но если в 3м уровне еще можно шутить, то в нуле,шутка может закончиться синим экраном.

        Отсюда мое решение, на Win XP sp2 поставил:
        1. WinDBG 4.6.0007.0
        2. WM ware 5.5.1 build 19175
        3. Настроил переменные среды для загрузки символов
        4. Создал виртуальную машину и Поставил WinXP sp2, после отключил в ней подкачку, в boot.ini прописал загрузку по /debugport=com1 /boudrate=115200 /debug /fastdetect
        5. Создал батник windbg.bat:
        Код:
        cd /d "c:\Program Files\Debugging Tools for Windows\"
        start windbg.exe -k com:pipe,port=\\.\pipe\com_1
        -y SRV*c:\tmp\WinXPsp2\symbols\*http://msdl.microsoft.com/download/symbols
        6. В настройках виртуальной машины указал что, последовательный порт будет через \\.\pipe\com_1

        Дальше как не пытаюсь у меня не получается работать с виндой в вирт.машине, подскажите что щелкать и простые приемы, пошлите на худой конец к документации на эту тему по мимо стандартных идущих в поставке( в них я уже ни чего не понимаю)
        • Подскажите пожалуйста , как сделать так чтоб текст внутри ячейки таблици html не растягивал эту ячейку?т.е у меня таблица по середине экрана размером 1000px слева меню 200px с права должен располагаться текст 800px так вот этот текст тянет всю таблицу в ширь, как сделать так чтоб текст не растягивал ячейку и начинался с новой строки?
  • Практические разделы
      • Не могу найти, где настраивается кодировка символов в поле запроса в MySQL Query Browser под Виндой.
        MySQL Query Browser версии 1.2.12.
        База имеет кодировку UTF8, при написании запроса с русскими символами, последние отображаются квадратами.
      • В SQL совсем не селен( Конктретно MySQL БД синонимов.
        Имеется - две табилцы по две колонки:

        1. words с колонками id , word
        id - от 1 до n
        word - слова (на каждый id по 1 слову)
        и 2. synonyms с колонками w_id и s_id
        w_id - айди слова для которого ищем синоним
        s_id - айди синонима

        .
        Нужно имея слово заданное найти его айдишник, затем просмотреть какие синонимы соотвествуют этому айдишнику, и выбрать синонимы.
        Примерно так. К БД пометка была:
        Пару слов о том, как использовать. Для начала получаете id слова запросом SELECT id FROM words WHERE word='Профит'. После этого получаем список синонимов SELECT w_id, s_id FROM synonyms WHERE w_id='1234' or s_id='1234'. Сортируем повторяющиеся значения и забираем слова-синонимы SELECT word FROM words WHERE id IN (1,2,3,4,5 ...). Умные дядьки объединят все запросы в один большой и будут счастливы.

        Вот, но мне это не по силам( может посдкажете что использовать или как объединить?
      • пока решил сюда тему создать.

        Вопрос такой: кто пользовался микроконтроллером FT232BM
        ( это эмулятор ком порта, который работает через USB )

        пока так удочку закинул - чтобы найти, кому потом глупые вопросы позадавать )

        И имеется ли альтернативное решение, не только этот МК ?
      • Я к коду с двумя вращающимися кубами добавил материал и освещение и z-буфер.

        Только что-то странно, у меня тип света "Параллельный или направленный - он не имеет источника, но светит в заданном направлении", но почему-то, то свет попадает на кубы, то нет. Ведь вроде должны кубы всегда освещаться. А получаеться так как будто фанарь направили на кубы и включают и выключают фанарь через определённый проиежуток времени.

        А как сделать чтобы кубы всегда освещались?
        И ещё как сделать чтобы они тень оставляли?

        Код:
        // Функция установки освещения и материалов
        void LightMaterial(void)
        {
        // Создаём материал
        D3DMATERIAL9 Material;
        // Создаём освещение
        D3DLIGHT9 Light;
        D3DXVECTOR3 VectorDir;

        // Обнуляем память под материал
        ZeroMemory(&Material, sizeof(D3DMATERIAL9));
                    // Задаём цвета для диффузного и цвета подсветки
        Material.Diffuse.r = Material.Ambient.r = 0.5f;
        Material.Diffuse.g = Material.Ambient.g = 1.0f;
        Material.Diffuse.b = Material.Ambient.b = 0.0f;
        Material.Diffuse.a = Material.Ambient.a = 1.0f;
        // Устанавливаем материал
        pDirect3DDevice->SetMaterial(&Material);
        // Обнуляем память под освещение
        ZeroMemory(&Light, sizeof(D3DLIGHT9));
                    // Тип света
        Light.Type = D3DLIGHT_DIRECTIONAL;
        // Количество красного в свете
        Light.Diffuse.r = 1.0f;
        Light.Diffuse.g = 1.0f;
        Light.Diffuse.b = 1.0f;
        // Максимальное расстояние действия источника света
        Light.Range = 1000.0f;
        // Вектор, задающий направление света
        VectorDir = D3DXVECTOR3(0.0f, 0.0f, 1.0f);
        // Нормализуем вектор VectorDir и записываем в свойства направления Light
        D3DXVec3Normalize((D3DXVECTOR3*)&Light.Direction, &VectorDir);
        // Устанавливаем свет
        pDirect3DDevice->SetLight(0, &Light);
        // Включаем свет с соответсвующим индексом
        pDirect3DDevice->LightEnable(0, TRUE);
        // Устанавливаем параметры рендеринга, включая освещение
        pDirect3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
        // Устанавливаем параметры рендеринга, включая окружающее освещение
        pDirect3DDevice->SetRenderState(D3DRS_AMBIENT, 0);
        }

        Полный код в прикреплённом файле и исполняемый файл в архиве.
  • Клубное
        • Тут выкладываем и обсуждаем свои фотографии. Мои находятся тут: http://mczim.member.shelek.ru/gallery2/main.php

          Я свои фотографии буду выкладывать ссылками и комментировать, так экономичнее :) Все остальные могут прикреплять свои фотографии в этой теме.

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



С уважением, команда Клуба.


В избранное