Объем аудиофайла расчитывается так: <em><u> I = k*r*f*t ,</u> </em>
где k - количество каналов записи (моно - 1, стерео - 2);
f - частота дискретизации (кол-во отсчетов, запоминаемых за 1 секунду, измеряется в Гц);
r - глубина кодирования (сколько бит приходится на 1 отсчет);
t - время звучания
итак, нам дано:
k = 1 т.к. у нас моноаудиофайл
I = 30 мб =30*1024*1024*8 бит = 3*10*2²³ бит
r = 16 бит = 2⁴ бит,
f = 48 кГц = 48 000 Гц = 3*2⁴*10³ Гц,
нужно найти время t.
из формулы <em><u>I = k*r*f*t </u></em> выразим t
t = I/(k*r*f)
t = (3*10*2²³)/(1*2⁴*3*2⁴*10³)= (3*10*2²³)/(2⁸*3*10³) = 2¹⁵/10²= 327,68 с.
результат подозрительный, конечно...
#!/usr/bin/python3
'''
пологаю, условие как есть: без пробелов, без OCR, без какого-либо форматирования
т.е. вводные строки текста выглядят так:
aaaaaayyyymmddbbbbbbbccccсрочныйeeee
я добавил поддержку некоторых разделителей в выражение, на случай если они
всётаки имеются
тестовые данные:
123456199601011234567987срочный000
123456199603291234567987срочный000
123456 1996-03-29 1234567 987 срочный 000
123456200109111234567987срочный000
тогда, решаем это с помощью регулярных выражений
как видно, в условии не сказано, что считать за код города. предположим,
что код города - это первая цифра от num2
'''
import re
import datetime
R = re.compile(
r'\s*(?P<num1>\d{6})\s*(?P<y>\d{4})\-?(?P<m>\d{2})\-?(?P<d>\d{2})\s*'
r'(?P<num2>\d{7})\s*'
r'(?P<time>\d+)\s*(?P<urgency>(срочный|обычный))\s*(?P<price>\d+)\s*'
)
d1 = datetime.datetime(1996, 3, 15)
d2 = datetime.datetime(1996, 4, 12)
while True:
a = ""
try:
a = input("введи> ")
except EOFError:
print("\n")
exit(0)
res = R.match(a)
if res == None:
print("ошибка парсинга")
continue
dd = datetime.datetime.now()
try:
dd = datetime.datetime(
int(res.group("y")),
int(res.group("m")),
int(res.group("d"))
)
except ValueError:
print("неправильная дата")
if res.group("urgency") == "срочный" and (dd > d1 and dd < d2):
n = res.group("num2")
print("номер1 {}, код {}, номер2 {}".format(
res.group("num1"), n[0], n[1:]))
Uses
graphABC;
const
W = 800;
H = 500;
function F(x: real): real;
begin
F := cos(x * x);
end;
var
x0, y0, x, y, xLeft, yLeft, xRight, yRight, n: integer;
a, b, fmin, fmax, x1, y1, mx, my, dx, dy, num: real;
i: byte;
s: string;
begin
SetWindowSize(W, H);
xLeft := 50;
yLeft := 50;
xRight := W - 50;
yRight := H - 50;
a := -2;b := 6;dx := 0.5;
fmin := -10;fmax := 20;dy := 2;
mx := (xRight - xLeft) / (b - a);
my := (yRight - yLeft) / (fmax - fmin);
x0 := trunc(abs(a) * mx) + xLeft;
y0 := yRight - trunc(abs(fmin) * my);
line(xLeft, y0, xRight + 10, y0);
line(x0, yLeft - 10, x0, yRight);
SetFontSize(12);
SetFontColor(clBlue);
TextOut(xRight + 20, y0 - 15, 'X');
TextOut(x0 - 10, yLeft - 30, 'Y');
SetFontSize(8);
SetFontColor(clRed);
n := round((b - a) / dx) + 1;
for i := 1 to n do
begin
num := a + (i - 1) * dx;
x := xLeft + trunc(mx * (num - a));
Line(x, y0 - 3, x, y0 + 3);
str(Num:0:1, s);
if abs(num) > 1E-15 then
TextOut(x - TextWidth(s) div 2, y0 + 10, s)
end;
n := round((fmax - fmin) / dy) + 1;
for i := 1 to n do
begin
num := fMin + (i - 1) * dy;
y := yRight - trunc(my * (num - fmin));
Line(x0 - 3, y, x0 + 3, y);
str(num:0:0, s);
if abs(num) > 1E-15 then
TextOut(x0 + 7, y - TextHeight(s) div 2, s)
end;
TextOut(x0 - 10, y0 + 10, '0');
x1 := a;
while x1 <= b do
begin
y1 := F(x1);
x := x0 + round(x1 * mx);
y := y0 - round(y1 * my);
if (y >= yLeft) and (y <= yRight) then SetPixel(x, y, clGreen);
x1 := x1 + 0.001
end
end.
Дано
N=16
K=128×200
Найти
I
Решение
I=k*i
N=2^i=16
i=4
I=4×128×200=102400 бит
102400:8=12800 байт
12800:1024=12,5 Кб
Ответ: 12,5 Кб
===== PascalABC.NET =====
function nF(n: integer) := Range(1, n).Product;
begin
SeqGen(5, i -> nF(i), 1).Sum.Println
end.