+ Reply to Thread
Results 1 to 1 of 1

Thread: 3. Файловый ввод/вывод ("Курс молодого исследователя", по мотивам "The Binary Auditor". Свободный перевод: Prosper-H)

  1. #1
    root's Avatar

    Default 3. Файловый ввод/вывод ("Курс молодого исследователя", по мотивам "The Binary Auditor". Свободный перевод: Prosper-H)

    3.1 Задание - Программа разделения файлов

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

    Параметры командной строки, которые должна обрабатывать ваша программа:

    Code:
    C:\Programs> FileSplit bigFile baseName chunkSize
    • bigFile – указывается путь к файлу;
    • baseName – общее базовое имя, для частей разбиваемого файла. Например, baseName = Part, тогда частям, разбиваемого файла, будут даны такие имена: Part0, Part1, Part2, …, PartN
    • chunkSize – размер каждой части, за исключением последней.

    Так же ваша программа должна уметь, корректно, обрабатывать текстовые и бинарные файлы.


    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!


    3.2 Задание - Программа сравнения текстовых файлов

    Напишите программу, которая сравнивает два файла строка за строкой. Параметры командной строки, будут выглядеть так:

    Code:
    C:\Programs> FileComp file1 file2 [limit]
    Считывайте с каждого файла по одной строке. Затем сверяйте их. Если строки идентичны, переходите к следующим строкам. Если же строки не идентичны, то:
    • Выводите номер строки;
    • Под номер строки выводите, поочередно, сверяемые строки.

    Часто когда сверяемые файлы имеют много отличий, вы можете захотеть отключить вывод всех отличающихся строк. Для этого служит последний параметр «limit». В нем указывается, какое количество отличающихся строк можно вывести. Если лимит превышается, то программа должна сгенерировать исключение NumberFormatException и остановить свою работу.

    Пример:

    Code:
    C:\Programs> FileComp .\Aug\main.cpp .\Sep\main.cpp 2
    128:
    bool DnsQuery_A();
    bool DnsQuery_W();
    
    129:
    bool DnsQuery_W();
    bool DnsQuery_A();

    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!


    3.3 Задание - Эксперимент

    Допустим, вы проводите эксперимент, определяющий влияние белковой диеты на уровень холестерина в крови. У вас есть несколько групп людей. К каждой группе будет применена разная диета. В начале эксперимента, вы должны измерить уровень холестерина, в крови у каждого из участников. После взятия анализов начинается эксперимент, который длится один месяц. По окончании эксперимента вам надо зафиксировать конечный уровень холестерина.

    Далее вам нужно внести все зафиксированные данные в текстовый файл, имеющий такой формат:

    Code:
    Номер эксперимента №1
    
    Номер группы № 1
    Человек 1, начальные данные о холестерине в крови
    Человек 1, конечные данные о холестерине в крови
    Человек 2, начальные данные о холестерине в крови
    Человек 2, конечные данные о холестерине в крови
    Человек N, начальные данные о холестерине в крови
    Человек N, конечные данные о холестерине в крови
    
    Номер группы № 2
    Человек 1, начальные данные о холестерине в крови
    Человек 1, конечные данные о холестерине в крови
    Человек 2, начальные данные о холестерине в крови
    Человек 2, конечные данные о холестерине в крови
    Человек N, начальные данные о холестерине в крови
    Человек N, конечные данные о холестерине в крови
    
    Номер группы № 3
    Человек 1, начальные данные о холестерине в крови
    Человек 1, конечные данные о холестерине в крови
    Человек 2, начальные данные о холестерине в крови
    Человек 2, конечные данные о холестерине в крови
    Человек N, начальные данные о холестерине в крови
    Человек N, конечные данные о холестерине в крови
    
    ...
    
    Номер группы № N
    ...
    Далее, следует считать данные из вышеуказанного файла. После чего проанализировать полученные данные, подсчитав в каждой группе:
    • Средний, начальный уровень холестерина в крови;
    • Средний, конечный уровень холестерина в крови;
    • Разницу межу начальным и конечным показателями.

    После того, как полученные данные будут проанализированы – результат нужно записать в файл следующего формата:

    Code:
    Эксперимент 1
    
    Группа 1
    В среднем до эксперимента: 
    В среднем после эксперимента:
    Разница:
    
    Группа 2
    В среднем до эксперимента: 
    В среднем после эксперимента:
    Разница:
    
    Группа 3
    В среднем до эксперимента: 
    В среднем после эксперимента:
    Разница:
    
    ...
    
    Группа N
    В среднем до эксперимента: 
    В среднем после эксперимента:
    Разница:
    Пример:

    Code:
    Experiment.txt
    
    3
    2
    200
    190
    212
    210
    3
    240
    220
    204
    208
    256
    230
    1
    202
    185
    Code:
    Result.txt
    
    Эксперимент 3
    
    Группа 2
    В среднем до эксперимента: 206
    В среднем после эксперимента: 200
    Разница: -6
    
    Группа 3
    В среднем до эксперимента: 233
    В среднем после эксперимента: 219
    Разница: -14
    
    Группа 1
    В среднем до эксперимента: 202
    В среднем после эксперимента: 185
    Разница: -17

    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!


    3.4 Задание - Генератор

    Написать программу, которая создает текстовый файл, содержащий в себе случайные не повторяющиеся числа, в диапазоне от 0 до HighValue-1.

    Программа должна обрабатывать такие параметры:
    • HighValue – задает предел, генерируемых случайных чисел;
    • PerLine – задает количество выводимых символов на строку;
    • Filename – задает имя файла, где будет сохранен результат работы программы.

    Так же вы должны создать класс Random, в котором должен присутствовать метод «next_int();», который должен каждый раз, когда к нему обращаются, возвращать числовое значение в диапазоне от 0 до HighValue-1.

    Пример:

    Code:
    C:\Programs> RandomIntData
    
    Enter HighValue: 100
    Enter how many per line: 10
    Enter Filename: rdata.dat
    Code:
    C:\Programs>type rdata.dat
    
    4 12 54 10 38 97 40 11 80 16
    36 41 67 67 93 58 62 12 50 99
    18 42 9 28 45 6 68 72 80 28
    86 63 22 17 68 18 59 50 6 50
    90 8 68 61 9 24 77 34 62 61
    63 8 15 17 67 58 34 56 12 50
    43 85 39 77 30 68 89 88 65 68
    84 29 42 74 48 55 19 82 95 3
    39 27 25 96 41 39 18 84 39 88
    82 58 84 90 74 35 24 89 85 92

    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!


    3.5 Задание - Выделение операторов Java

    Напишите программу, которая на входе получает исходный файл на языке Java, а на выходе обрамляет операторы Java, HTML-тегами “<B></B>”.

    Пример, входящих данных:

    Code:
    public class JavaSource 
    { 
      public static void main ( String[] args )  
      { 
        if ( args.length == 3 ) 
          new BigObject(); 
        else 
          System.out.println("Too few arguments."); 
      } 
    }
    Будет преобразован в:

    Code:
    <b>public</b> <b>class</b> JavaSource 
    { 
      <b>public</b> <b>static</b> <b>void</b> main ( String[] args )  
      { 
        <b>if</b> ( args.length == 3 ) 
          <b>new</b> BigObject(); Binary-Auditing.com, Binary Auditing™ and the Binary Auditor™ 
     
    14
        <b>else</b> 
          System.out.println("Too few arguments."); 
      } 
    }

    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!


    3.6 Задание - Замена HTML-тегов пробелами

    Любой текстовый редактор, например Блокнот, может быть использован для создания Web-страниц. К сожалению, подобные редакторы, не позволяют проверить орфографию. Для проверки орфографии можно использовать Word. Но когда файл содержит в себе HTML-теги, все строки с ними помечаются как ошибки, из-за чего тяжело обнаружить реальные ошибки. В данном упражнении будет написана программа, которая очистит файл от HTML-тегов (простых).

    Напишите программу, которая считывает текстовый файл, а на выходе создает другой текстовый файл. Считываемый файл, должен содержать простой html-текст. Исходящий файл будет копией входящего, затем лишь исключением, что HTML-теги будут заменены на «пробелы». Наша программа не будет проверять HTML-синтаксис; она будет работать с потоком лексем и заменять каждую лексему, которая будет соответствовать «тегу». Для нашей программы, тегом будет любая лексема похожая на, этот тег:

    Code:
    <Crew>	</Crew>
    Предположим, что “Crew” это любое слово (но на его месте может быть и одна буква или вообще отсутствовать какие-либо буквы), так же обратим внимание, что нет пробелов между скобками “<” и “>”. Такому описанию, подходят следующие теги:

    Code:
    <p> </p> <em> </em>
    <rats> </1234> <blockquote> </>
    И не подходят следующие:
    Code:
    < p>       </ p>     <em >     </e m> 
    <table border cellpadding=5>     <block quote>     < /em>

    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!


    3.7 Задание - Замена HTML-тегов пробелами 2

    Напишите программу, отфильтровывающую любой похожий тег:

    Code:
    <Crew …>	</Crew …>
    На месте “Crew”, может быть любое слово, которое начинается сразу после “<”, а на месте “…” может быть любое количество текста, пока не встретится “>”, т.е. вам предстоит написать программу, отфильтровывающую похожие теги:

    Code:
    <p>       </p>     <em >     </em > 
    <table border cellpadding=5>     <word another word>     </x y z>

    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!


    3.8 Задание - Крипто-аналитик

    Часть первая:

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

    Code:
    C:\mydir> freqCount text.txt text.rept –all
    Описание работы программы:
    • Открыть файл text.txt;
    • Привести все символы к верхнему регистру;
    • Подсчитать количество всех символов;
    • Подсчитать количество отдельных символов;
    • Сохранить результат в файл text.rept

    Пример файла “text.rept”:

    Code:
    C:\mydir> freqCount text.txt text.rept -all
    Code:
    C:\mydir>type text.rept 
    
      Total alphabetical characters:  373267 
       
       A:       31840       8.53% 
       B:        5942       1.59% 
       C:        7627       2.04% 
       D:       17541       4.69% 
       E:       45614      12.22% 
       F:        7191       1.92% 
       G:        7960       2.13% 
       H:       22500       6.02% 
       I:       25095       6.72% 
       J:         733       0.19% 
       K:        3443       0.92% 
       L:       17534       4.69% 
       M:        9324       2.49% 
       N:       26516       7.1% 
       O:       27344       7.32% 
       P:        6083       1.62% 
       Q:         275       0.07% 
       R:       21285       5.7% 
       S:       23398       6.26% 
       T:       32579       8.72% 
       U:       10720       2.87% 
       V:        4201       1.12% 
       W:        9063       2.42% 
       X:         546       0.14% 
       Y:        8745       2.34% 
       Z:         168       0.04%
    Описание параметров командной строки:
    • text.txt – любой текстовый файл. В место “text”, может быть любое имя;
    • text.rept – имя файла, создаваемого программой. В нем будет храниться результат работы;
    • -all – говорит программе о том, что нужно подсчитать все символы;

    Часть вторая:

    Иногда бывает нужно подсчитать, не частоту вхождения всех букв, а только первых букв слов. Вам следует усовершенствовать программу и добавить возможность подсчета, только, первых букв слов. Если в программе встречается перенос слова на другую строку “-”, то следующую за этим символом букву не учитывать, т.е. слово не должно превращаться в два слова.

    Code:
    C:\mydir> freqCount avonlea.txt avonlea.rept -first
    Code:
      It is often true that handling the an- 
      noying details makes up the large maj- 
      ority of the statements in a pro- 
      gram.
    В примере выше слова “an-noying”, “maj-ority”, “pro-gram” – должны восприниматься как одно слово, а не два.

    Описание параметров командной строки:
    • text.txt – любой текстовый файл. В место “text”, может быть любое имя;
    • text.rept – имя файла, создаваемого программой. В нем будет храниться результат работы;
    • -all – говорит программе о том, что нужно подсчитать все символы;
    • -first – говорит программе о том, что нужно подсчитать толь первые символы, каждого слова.


    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!



    3.9 Задание - Простое шифрование

    Напишите программу, которая будет шифровать файлы. Программа должна шифровать каждый байт исходного файла, используя операцию поразрядного дополнения. В C++ это оператор “~”.

    Пример:

    Code:
    input byte output byte
    00110101  11001010 
    00000000  11111111 
    10000000  01111111

    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!


    3.10 Задание - Дамп

    Напишите программу, которая открывает и отображает файл, в hex-виде. Пример:

    Code:
    C:\Programs> DIR 
    
    06/23/00  10:52p                 1,859 HexDump.class 
    06/23/00  10:52p                 2,855 HexDump.java 
    06/23/00  08:23p                    60 ints.dat
    Code:
    C:\Programs> HexDump ints.dat 
    
    00 00 00 0C 00 00 03 FF FF FF FF C8 00 01 4B 2D 
    00 00 00 00 FF FF DB 65 00 00 00 22 00 00 02 8E 
    FF FF FF E9 FF FF FE DA 00 00 00 12 FF FF FF E7 
    00 00 00 AD 00 00 00 2D FF FF FF FE

    Варианты решений, присылать на email: root@reverse4you.org

    Данное задание успешно выполнили:
    • AbreC
    • Стань следующим!
    Успех – это путь от провала до провала без потери энтузиазма. (В. Черчиль)

    Не бойся идти медленно, бойся остановиться. (Китайская пословица)

    When you lose fun and start doing things only for the payback, you're dead. (c) TCLH (Phrack 65, Intro)

  2. 2 пользователя(ей) сказали cпасибо:
    AbreC (17-10-2010) ximera (09-05-2014)
+ Reply to Thread

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 01:39
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org