Первые антивирусные программы появились еще зимой 1984 года (первый вирус для персональных компьютеров apple появился в 1977 году, и только в 1981 году появились вирусы, представляющие какую-либо угрозу) под названиями chk4bomb и bombsqad. их написал американский программист энди хопкинс (andy hopkins). chk4bomb позволяла проанализировать текст загрузочного модуля и выявить все текстовые сообщения и «подозрительные» участки кода. программа bombsqad перехватывала операции записи и форматирования, выполняемые через bios. при выявлении запрещённой операции можно было разрешить или запретить её выполнение.первый антивирус в современном понимании этого термина, то есть резидентный, «защищающий» от вирусных атак, появился в 1985 году. программа drprotect создана усилиями джи вонг (gee wong). разработка блокировала все операции (запись, форматирование), выполняемые через bios. в случае выявления такой операции программа требовала рестарта системы.
burtsev3339
05.06.2021
Вот исходник. заменишь строку и искомые слова. /* * * программа решает : дана строка символов. группы символов, * разделенные пробелами (одним или несколькими) и не содержащие пробелы * внутри себя, будем называть словами. * заменить в строке слова s на слова w ( s, w - заданы). * * */ // #include < stdio.h> #include < string.h> #include < stdlib.h> #include < ctype.h> #define bool int #define true 1 #define false 0 #define max(x, y) ) > (y)) ? (x) : (y)) #define space ' ' // подпрограмма определяет, является ли группа символов словом. bool iswordc (const char*const str, const char*const begin, int len); // #pragma argsused int main(int argc, char* argv[]) { const char*const def_str = "ехал грека через реку , видит грека – в реке рак. сунул грека руку в реку, рак за руку греку – цап! рекурсия рукавицы"; const char* s[] = { "грека", "реку", "руку", "рак", "" }; const char* w[sizeof(s) / sizeof(char*)] = { "", "поле", "ногу", "мышь", "грека" }; const int counts = sizeof(s) / sizeof(char*); int i, offset, delta, isword; char* pos; char* str = (char*)malloc(strlen(def_str)+1); if (! str) return 1; memcpy(str, def_str, strlen(def_str)+1); for ( i = 0; i < counts; ++i) { pos = str; while ((pos = strstr(pos, s[i])) ! = null) { // группы символов, разделенные пробелами, будем называть словами. if (iswordc(str,pos,strlen(s[i])) == true) { if (strlen(s[i]) ! = strlen(w[i])) { // при разной длине - компенсируем разницу, т.е при замене рак на раковина не должны портиться другие данные. delta = strlen(s[i]) - strlen(w[i]); if (delta < 0) { offset = pos - str; str = (char*)realloc(str, strlen(str) + 1 - delta ); if (! str) return 1; str[strlen(str) - delta] = '\0'; pos = str + offset; memmove(pos - delta, pos, strlen(pos)); } memset(pos, space, max(strlen(w[i]), strlen(; // замена "грека" на "аа" = "" } strncpy(pos, w[i], strlen(w[i])); } pos += strlen(s[i]); } } free(str); return 0; } // // // подпрограмма определяет, является ли группа символов словом. bool iswordc(const char*const str, const char*const begin, int len) { bool lhs,rhs; // ( рак и раковина разные слова.) // к (unsigned char) необходимо т.к. функции isspace и ispunct делают проверку (a> -1 & & a< =255). lhs = (begin == str); // исключаем выход за границы. lhs = lhs || (isspace((unsigned char) *(begin - 1)) || ispunct((unsigned char) *(begin - ; rhs = isspace((unsigned char) *(begin + len))|| ispunct((unsigned char) *(begin + len)); return lhs & & rhs; } //
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
Какие вопросы могут задать на собеседовании компьютерной академии шаг ? ( одесса, садовая 3 )