Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 14.12.2021
Сообщений: 6

Программа определяющая частоту появления каждого байта в файле на Pascal ABC.NET

14.12.2021, 09:09. Показов 1164. Ответов 10

Студворк — интернет-сервис помощи студентам
Нужна программа определяющая частоту появления каждого байта в файле на Pascal ABC.NET
Мне есть 5 файлов. 1 файл - .jpg. 2 файл - .bmp . 3 - .doc. 4 - .doc
5 - .docx . 6 - .txt
И после обработки файла,я должен получить выходной файл с именем (если text01.txt , то получу txt01.tab. Этот файл содержит следующие строки:
Text01.txt
20002
32 0.196530346965303
238 0.0718928107189281
232 0.0568943105689431
224 0.0567943205679432
229 0.0567443255674433
237 0.0467453254674533
235 0.0373462653734627

39 4.999500049995E-05
40 4.999500049995E-05
41 4.999500049995E-05
57 4.999500049995E-05
198 4.999500049995E-05
219 4.999500049995E-05
4.68529550441711
Помогите пожалуйста
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2021, 09:09
Ответы с готовыми решениями:

Программа определяющая частоту появления каждого бита в файле
Здравствуйте. Надо сделать программу определяющую частоту появления каждого байта в файле. Помогите пожалуйста

Частота появления каждого байта в файле
Здравствуйте. Может кто из знающих людей,скажет,что конкретно нужно изучить для создания,программы в tp. Не прошу готового решения,а просто...

Программа написана на Pascal ABC, но нужно её открыть в Pascal ABC NET
program pr; uses crt, graphABC; var i:integer; begin setwindowwidth(700); setwindowheight(400); for i:=1 to 10 do begin ...

10
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
14.12.2021, 10:31
сюда заглядывал Частота появления каждого байта в файле ?

Цитата Сообщение от MikhailGlinski Посмотреть сообщение
219 4.999500049995E-05
4.68529550441711
Последнее число (которое 4.68529550441711) - это что такое? похоже на опечатку или технический сбой.

ну и до кучи.
или вот код == начало решения данной задачи на PascalABC.NET - Программа определяющая частоту появления каждого бита в файле
0
0 / 0 / 0
Регистрация: 14.12.2021
Сообщений: 6
14.12.2021, 10:51  [ТС]
mr-Crocodile, на счёт первого, там, если я правильно понимаю турбо Паскаль. На счёт второго это такое условие. Результат должен быть именно такой
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
14.12.2021, 11:32
Цитата Сообщение от MikhailGlinski Посмотреть сообщение
На счёт второго это такое условие. Результат должен быть именно такой
какой?
что означает число 4.68529550441711 ?
ты собираешься написать программу, не понимая, что это за числа и как они получены?

Цитата Сообщение от MikhailGlinski Посмотреть сообщение
на счёт первого, там, если я правильно понимаю турбо Паскаль.
точно. код под PascalABC.NET нужно адаптировать.
например, так, как это сделано тут - Программа определяющая частоту появления каждого бита в файле

Добавлено через 1 минуту
Цитата Сообщение от MikhailGlinski Посмотреть сообщение
Мне есть 5 файлов. 1 файл - .jpg. 2 файл - .bmp . 3 - .doc. 4 - .doc
5 - .docx . 6 - .txt
точно пять файлов? Ты откуда этот же безграмотный текст скопировал?
0
0 / 0 / 0
Регистрация: 14.12.2021
Сообщений: 6
14.12.2021, 12:48  [ТС]
mr-Crocodile, это число величина энтропии
Не важно от куда, там архив с пятью файлами, две картинки, три текстовых файла
После обработки их программой должен быть такой результат(только текстовые файлы)
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
14.12.2021, 13:23
Цитата Сообщение от MikhailGlinski Посмотреть сообщение
три текстовых файла
.doc и .docx это не текстовые.
.doc это бинарный, а .docx это вообще архив.
Хотя в этой задаче это вообще не важно.

А вот что важно - так это как правильно вычислять каждое из чисел в выходном файле?
Большую часть можно догадаться, но не всё. И в любом случае, получить и передать сюда точное описание - это то, что должны сделать вы, как ТС.
0
0 / 0 / 0
Регистрация: 14.12.2021
Сообщений: 6
14.12.2021, 14:05  [ТС]
Sun Serega,
архив с именем Arh??.rar
Разархивировать его. Получится 6 файлов: Pic??.bmp, Pic??.jpg, Text??.doc,
Text??.docx,Text??.txt и сам архив Arh??.rar.
Создать программу определяющую частоту
появления каждого байта в файле.
Результаты исследования вывести в текстовые файлы с именем
соответствующем расширению исследуемого файла и с
расширением tab. Например, при обработке файла Text01.doc должен
получиться файл с именем doc01.tab, а при обработке файла Text01.txt —
файл txt01.tab.
Содержание результирующего файла:
1. первая строка — имя исследуемого файла;
2. вторая строка — количество байт в исследуемом файле;
3. пустая строка;
4. последующие строки — коды символов и частоты их появления,
разделенные пробелом или, что желательнее, символом табуляции
(код — 9), отсортированные по убыванию частот;
5. пустая строка
6. последняя строка — величина энтропии.
Содержание отчета
1) Тема
2) Описание задания
3) Текст программы для обработки и получения результата с
комментариями, поясняющими основные моменты программы. Обязательно
укажите среду, в которой была написана программа.
К отчету прилагаются результирующие файлы.
Замечания
1) Копируемые файлы имеют различные типы и размеры. Если на
рабочем диске не хватает места для всех выбранных файлов, копируйте и
обрабатывайте их по одному.
2) Так как байт может принимать 256 значений (от 0 до 255), то можно
создать массив соответствующего размера. Это может быть массив записей с
полями, хранящими код символа и количество его появлений в данном
файле, или двумерный массив. Код каждого байта, вводимый в массив,
вначале совпадает с его индексом.

Ростислав Юсупов, сегодня в 14:00
3) Открывайте исследуемые файлы как файлы типа байт (BYTE).
Считывая каждый очередной байт, добавляйте в соответствующий счетчик 1.
Подсчитывайте и количество обработанных байтов.
4) После обработки всего файла необходимо данные отсортировать по
убыванию показателей счетчиков любым известным вам способом.
5) Оценкой частоты появления каждого из байтов считайте отношение
показания счетчика соответствующего этому байту к общему количеству
байтов.
Пример
После обработки файла с именем Text01.txt,получаем выходной файл с
именем txt01.tab, который содержит следующие строки
Text01.txt
20002
32 0.196530346965303
238 0.0718928107189281
232 0.0568943105689431
224 0.0567943205679432
229 0.0567443255674433
237 0.0467453254674533
235 0.0373462653734627

39 4.999500049995E-05
40 4.999500049995E-05
41 4.999500049995E-05
57 4.999500049995E-05
198 4.999500049995E-05
219 4.999500049995E-05
4.68529550441711
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
14.12.2021, 14:17
Лучший ответ Сообщение было отмечено mr-Crocodile как решение

Решение

Ок, теперь, по крайней мере вы скинули не огрызок. Из за этого обнаружилось куча мелочей вроде:
Цитата Сообщение от MikhailGlinski Посмотреть сообщение
3. пустая строка;
Остаётся только 1 вопрос - как энтропию считать в этом случае? Вам это должны были объяснять на занятии. И обычно копия объяснения будет где то вроде методички.

Добавлено через 18 секунд
Вот всё кроме энтропии:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## foreach var fname in EnumerateFiles('Имя папки') do
begin
  if System.IO.Path.GetExtension(fname) = '.tab' then continue;
  var bytes := System.IO.File.ReadAllBytes(fname);
  var counts := bytes.EachCount;
  
  var res_fname := fname + '.tab';
  var sw := new System.IO.StreamWriter(res_fname);
  
  sw.WriteLine(fname);
  sw.WriteLine(bytes.Length);
  
  sw.WriteLine;
  foreach var kvp in counts.OrderByDescending(kvp->kvp.Value) do
    sw.WriteLine($'{kvp.Key} {kvp.Value/bytes.Length}');
  sw.WriteLine;
  
  //TODO Энтропия
//  sw.WriteLine(???);
  sw.Close;
end;
2
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
14.12.2021, 15:43
Цитата Сообщение от Sun Serega Посмотреть сообщение
Остаётся только 1 вопрос - как энтропию считать в этом случае?
загуглил. есть подозрение, что вот так
Предполагается, что следующие переменные уже существуют:

byte_counts -это 256-элементный список количества байтов с каждым значением в вашем файле. Например, byte_counts[2] -это количество байтов со значением 2 .

total - это общее количество байтов в вашем файле.

Я напишу следующий код в Python, но должно быть очевидно, что происходит.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import math
 
entropy = 0
 
for count in byte_counts:
    # If no bytes of this value were seen in the value, it doesn't affect
    # the entropy of the file.
    if count == 0:
        continue
    # p is the probability of seeing this byte in the file, as a floating-
    # point number
    p = 1.0 * count / total
    entropy -= p * math.log(p, 256)
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
14.12.2021, 22:34
Нет, гадать не хочу, пусть ТС формулу кидает.
0
0 / 0 / 0
Регистрация: 14.12.2021
Сообщений: 6
15.12.2021, 08:21  [ТС]
У меня нет формулы,я просто задание получил
Попробую поискать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2021, 08:21
Помогаю со студенческими работами здесь

Корректировка записей в типизированном файле pascal abc.net
//У администратора железнодорожных касс хранится информация о свободных местах в поездах по всем направлениям на ближайшую неделю. ...

Определить частоту появления в тексте каждого слова
#include <conio.h> #include <stdio.h> #include <ctype.h> #include <string.h> main() { char tekst; char buf; ...

В тексте вычислить частоту появления каждого слова
2. В тексте вычислить частоту появления каждого слова.Есть код но он считает кол-во символо unit Unit1; interface uses ...

В тексте вычислить частоту появления каждого символа
1. На форме установлен редактор TMemo, графическая площадка TImage и список файлов TFileListBox. По двойному щелчку в списке файлов оценить...

Строка: посчитать частоту появления каждого символа
Для произвольного текста на произвольном языке с учетом регистра посчитать частоту появления каждого символа.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru