Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Антивирус


Автор: IvanK2 24.3.2006, 14:29
Написать программу, которая по заданному номеру сигнатур определяет, какими вирусами инфицирован анализируемый файл.
ПРИМЕР ФАЙЛОВ ВХОДНЫХ И ВЫХОДНЫХ ДАННЫХ.
Input.txt
4
smallvirus 2F3E?4E
bigvirys A5*FF?00*A6*23??24
viRusamarlNA 1F?07?5F
polymorph 22*33

Output.txt
smallvirus
polymorph


Помогите !!!!

Автор: IvanK2 24.3.2006, 17:36
Есть написанный код в паскале, нужно же написать в C++ (в среде Builder C++ или Microsoft Visual Studio .NET) знания о котором очень скудны..Помогите "перевести" с одного языка на другой?
Код:
Код

program AntiVirus;
uses Crt;
type
    VirData = record
    Sign: string[100];
    Name: string[20];
    flag: boolean;
end;
FindData = record
PF:byte; { позиция поиска в сигнатуре }
PS:byte; { последняя позиция * в сигнатуре при поиске }
PQ:byte; { последняя позиция ? в сигнатуре при поиске }
LS:byte; { длина сигнатуры }
end;
var VirAmount: byte; {количество вирусов}
    InputFile:text;
    Virus:array [1.. 10] of VirData;
    ResFind: array [1..10] of FindData;
    Ch:char;
    q:string;
    HByte:string[2];
    i:byte;
begin
ClrScr;
Assign(InputFile,'ol93_3.dat');
Reset(InputFile);
Readln(InputFile, VirAmount);
Writeln(VirAmount);

for i:=1 to VirAmount do begin
    ResFind[i].PF:=1;
    ResFind[i].PS:=1;
    ResFind[i].PQ:=1;
end;
ch:=#0;

for i:=1 to VirAmount do begin
    Virus[i].Name:='';
    repeat
        Read(InputFile,ch);
        if ch<> ' ' then Virus[i].Name:=Virus[i].Name+ch;
    until ch=' ';
    Readln(InputFile, Virus[i].Sign);
    Virus[i].flag:=true;
    ResFind[i].LS:=Length(Virus[i].Sign);
end;
for i:=1 to VirAmount do
Writeln(Virus[i].Name, ' ', Virus[i].Sign);

{----------------------------------}
while not(SeekEof(InputFile)) do begin
    Read(InputFile,HByte); Write(HByte);
    for i:=1 to VirAmount do begin
        if virus[i].sign[ ResFind[i].PF]='*'
        then begin
            ResFind[i].PS:= ResFind[i].PF;
            inc(ResFind[i].PF);
        end;
        if virus[i].sign[ ResFind[i].PF]='?'
        then begin
            ResFind[i].PQ:= ResFind[i].PF;
            inc(ResFind[i].PF);
        end;
        q:=copy(virus[i].sign, ResFind[i].PF,2);
        if HByte=copy(virus[i].sign, ResFind[i].PF,2)
        then inc(ResFind[i].PF,2);
    end;{ for i }
end; { while }
writeln;

for i:=1 to virAmount do
writeln(resfind[i].pf,' ',resfind[i].ps,' ',resfind[i].pq,' ',resfind[i].ls);
for i:=1 to virAmount do
if (resfind[i].pf>=resfind[i].ls) then writeln (virus[i].name);
end.


Автор: Damp1L 30.3.2006, 08:34
Да вообще тут всё просто, нада просто парсить указанный файл и всё, вообще нада только найти определённую сточку и сказать что типа найдено то или то.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)