C++ алгоритм сортировки простыми вставками (по возрастанию). 1. создание полного пути к файлу или директории char *combinepath(const char *directorypath, const char *filename); 2. рекурсивный обход всех файлов и директорий каталога directorypath с использованием функций _findfirst() и _findnext() и выполнение для каждого файла и каталога функции, переданной с указателя fileobjectprocessor typedef bool (*fileobjectprocessor)(bool isdirectory, const char *fileobjectpath); bool traversedirectory(char *directorypath, fileobjectprocessor fileobjectprocessor); функция обратного вызова, передаваемая при указателя типа fileobjectprocessor, должна возвращать true, если следует продолжать дальнейшую обработку файлов. функция traversedirectory должна возвращать true, если для всех файлов и каталогов функция, передаваемая при указателя типа fileobjectprocessor, вернула true, в противном случае она должна вернуть false. 3. на базе функции traversedirectory реализовать функцию, которая создаст в каждом каталоге, имя которого содержит вашу фамилию, дочерние папки с именами «самостоятельные работы», «контрольные работы» и «практические ». для этого необходимо реализовать функцию создания в указанном каталоге (директории) directorypath папки с именем subdirectoryname (не содержит слешей). bool createdirectory(const char *directorypath, const char *subdirectoryname); функция должна выполнить создание всех отсутствующих в файловой системе частей в directorypath. 4. на базе функции traversedirectory реализовать функции, которые выполняют переименование дочерних папок и файлов, которые содержат вашу фамилию. вместо фамилии в имени папки и файла должно появиться ваше фамилия, имя и отчество. например, папка «петухова» должна стать папкой «петухова надежда николаевна». для этого необходимо реализовать функции переименования файла или каталога (директории): bool renamefile(const char *originalfilepath, const char *newfilename); bool renamedirectory(const char *originaldirectorypath, const char * newdirectoryname); 5. на базе функции traversedirectory реализовать функцию копирования файлов, содержащих вашу фамилию, из исходной директории в целевую директорию с сохранением исходной структуры каталогов (каталоги, не содержащие в себе либо в дочерних каталогах файлов с вашей фамилией, не должны создаваться при копировании). для копирования файлов должна быть реализована и использована функция copyfile, копирующая содержимое файла sourcefilepath в новый файл newfilepath. bool copyfile(const char * sourcefilepath, const char *destinationfilepath, int blocksize); копирование должно осуществляться блоками размером blocksize. провести экспериментальную оценку скорости копирования для блоков разного размера (1 байт, 4096 байтов, 5000 байтов, 65536 байтов). 6. на базе функции traversedirectory реализовать функцию, определяющую количество файлов и размеры файлов в директории. возможно, для этого нужно будет изменить вид функции обратного вызова, передаваемой при указателя. 7. на базе функции traversedirectory реализовать функцию, выполняющую сортировку n целочисленных элементов (в тестах задать n равным номеру варианта + 10), содержащихся по смещению n байтов от начала файла (результат должен быть сохранен в том же файле), в дочерних директориях, содержащих вашу фамилию. при сортировке запрещено использовать временный буфер для чтения и записи из файла размером больше чем sizeof(int). алгоритм сортировки определяется номером варианта.
const
nDay:array[1..12] of integer=(31,28,31,30,31,30,31,31,30,31,30,31);
type
Date=record
Day,Month,Year:integer
end;
function DOW(Dat:Date):integer;
// день недели по дате. 0-Вс. 1-Пн, 7-Сб
var
a,y,m:integer;
begin
With Dat do begin
a:=(14 - month) div 12;
y:=Year-a;
m:=month+12*a-2;
DOW:=(7000+(day+y+y div 4-y div 100+y div 400+(31*m) div 12)) mod 7
end
end;
procedure DMY2Date(d,m,y:integer; var data:Date);
// Преобразует к дате заданные день, месяц и год
begin
data.Day:=d; data.Month:=m; data.Year:=y
end;
procedure LastDays(month,year:integer; var Wd,Fr:Date);
// даты последней среды (Wd) и пятницы (Fr) для месяца в году }
var
LastDay:Date;
n:integer;
begin
n:=nDay[month];
if (month=2) and (year mod 4 = 0) then Inc(n);
DMY2Date(n,month,year,LastDay);
n:=DOW(LastDay); // номер последнего дня недели
Wd.Month:=month; Wd.Year:=year;
if n<3 then Wd.Day:=LastDay.Day-(n+4)
else
if n=3 then Wd.Day:=LastDay.Day
else Wd.Day:=LastDay.Day+3-n;
Fr.Month:=month; Fr.Year:=year;
if n<5 then Fr.Day:=LastDay.Day-(n+2)
else
if n=3 then Fr.Day:=LastDay.Day
else Fr.Day:=LastDay.Day-1
end;
var
Wd,Fr:Date;
ff,mf:Text;
m:integer;
begin
Assign(ff,'father.txt'); Rewrite(ff);
Assign(mf,'mother.txt'); Rewrite(mf);
// Сентябрь-декабрь 2015 года
for m:=9 to 12 do begin
LastDays(m,2015,Wd,Fr);
if Odd(Wd.Day) then Writeln(mf,Wd.Day,'.',m,'.2015 - 1 класс')
else Writeln(ff,Wd.Day,'.',m,'.2015 - 1 класс');
if Odd(Fr.Day) then Writeln(mf,Fr.Day,'.',m,'.2015 - 5 класс')
else Writeln(ff,Fr.Day,'.',m,'.2015 - 5 класс')
end;
// Январь - май 2016 года
for m:=1 to 5 do begin
LastDays(m,2016,Wd,Fr);
if Odd(Wd.Day) then Writeln(mf,Wd.Day,'.',m,'.2016 - 1 класс')
else Writeln(ff,Wd.Day,'.',m,'.2016 - 1 класс');
if Odd(Fr.Day) then Writeln(mf,Fr.Day,'.',m,'.2016 - 5 класс')
else Writeln(ff,Fr.Day,'.',m,'.2016 - 5 класс')
end;
Close(ff); Close(mf)
end.
Содержимое выходных файлов:
father.txt
30.9.2015 - 1 класс
28.10.2015 - 1 класс
30.10.2015 - 5 класс
30.12.2015 - 1 класс
24.2.2016 - 1 класс
26.2.2016 - 5 класс
30.3.2016 - 1 класс
mother.txt
25.9.2015 - 5 класс
25.11.2015 - 1 класс
27.11.2015 - 5 класс
25.12.2015 - 5 класс
27.1.2016 - 1 класс
29.1.2016 - 5 класс
25.3.2016 - 5 класс
27.4.2016 - 1 класс
29.4.2016 - 5 класс
25.5.2016 - 1 класс
27.5.2016 - 5 класс
При автоматическом переводе могут возникнуть много проблем
в зависимости от контекста слова могут иметь разное значениеперевод пословиц, поговорок и прочих стандартных словосочетаний может не существовать на другом языке или может быть передан не верноотрицательные предложения могут перейти в положительныеигра слов часто непереводиманедостаток информации одного текста не может быть восполнен. Например в английском у глаголов нет родов, а в русском естьдругая причина потери смыслаэлектронный переводчик может не знать, как переводится слово или фраза, или не иметь всех вариантов перевода