Задача 1. Алфавит племени Мульти состоит из 16 букв. Какое количество информации несет 4 буквы этого алфавита? Задача 2. Твит, записан буквами из 128 – символьного алфавита, содержит 60 символов. Какой объем информации оно несет?
Задача 3. Информационное сообщение объемом 2 Кбайта содержит 1024 символова. Сколько символов содержит алфавит, при которого было записано это сообщение?
Задача 4. Сколько килобайтов составляет сообщение из 256 символов 16 – символьного алфавита?
Задача 5. Для записи текста использовался 64 – символьный алфавит. Каждая страница содержит 35 строк по 75 символов в строке. Какой объем информации содержат 10 страниц текста?
Дз 2 декабря
1.Для записи текста использовался 256-символьный алфавит. Каждая страница содержит 128 строк по 64 символа в строке. Какой объем информации содержат 10 страниц этого текста?
2. Можно ли уместить на одну флешку книгу, имеющую 843 страницы, причем на каждой странице этой книги 46 строк, а в каждой строке 62 символа? (объем флешки 2Мб)
3.Имеется 2 текста на разных языках. Первый текст использует 32-символьный алфавит и содержит 200 символов, второй – 16-символьный алфавит и содержит 250 символов. Какой из текстов содержит большее количество информации и на сколько бит?
ДЗ 23 декабря
1. 256-цветный рисунок содержит 200 байт информации. Из скольких точек он состоит?
2. Для хранения изображения размером 64x32 точек выделено 128 Кбайт памяти. Определите, какое максимальное число цветов допустимо использовать в этом случае.
3. Какой объем видеопамяти необходим для хранения двух страниц изображения при условии, что разрешающая дисплея равна 640 х 350 пикселей, а количество используемых цветов - 1024?
4. Видеопамять имеет объем, в котором может храниться 4-х цветное изображение размером 300 х 200. Какого размера изображение можно хранить в том же объеме видеопамяти, если оно будет использовать 16-цветную палитру?
5. Объем видеопамяти равен 1 Мб. Разрешающая дисплея - 800 х 600. Какое максимальное количество
procedure MatInput(a:array[,] of integer);
begin
Writeln('Вводите элементы матрицы построчно, в конце нажимая Enter');
for var i:=0 to Length(a,0)-1 do begin
Write(i+1,': ');
for var j:=0 to Length(a,1)-1 do Read(a[i,j]);
end
end;
procedure MatPrint(a:array[,] of integer);
begin
for var i:=0 to Length(a,0)-1 do begin
for var j:=0 to Length(a,1)-1 do Print(a[i,j]);
Writeln
end
end;
function IsEqual(a:array[,] of integer; j1,j2:integer;
flag:array of boolean):boolean;
// равны ли столбцы с индексами j1 и j2
begin
if flag[j2]=False then begin
Result:=True;
for var i:=0 to Length(a,0)-1 do
if a[i,j1]<>a[i,j2] then begin Result:=False; Break end;
flag[j2]:=Result
end
end;
begin
var n:=ReadInteger('Задайте число строк (столбцов) матрицы:');
var a:array[,] of integer;
var m:=ArrFill(n,False);
SetLength(a,n,n);
MatInput(a);
Writeln('*** Принятая матрица ***');
MatPrint(a);
var k:=1;
for var i:=0 to n-2 do
for var j:=i+1 to n-1 do
if IsEqual(a,i,j,m) then Inc(k);
if k>1 then Writeln('Количество совпадающих столбцов равно ',k)
else Writeln('нет совпадающих столбцов')
end.
Тестовое решение
Задайте число строк (столбцов) матрицы: 3
Вводите элементы матрицы построчно, в конце нажимая Enter
1: 1 2 2
2: 3 5 5
3: 2 2 2
*** Принятая матрица ***
1 2 2
3 5 5
2 2 2
Количество совпадающих столбцов равно 2
1) разбить все столбцы на группы одинаковых столбцов и посчитать внутри них число пар. Затем суммировать.
2) разбить столбцы на группы одинаковых столбцов и суммировать количество элементов в каждой из групп, если оно больше 1. То есть найти количество столбцов, для которых среди других столбцов найдется хотя бы один идентичный ему
3) разбить столбцы на группы одинаковых столбцов и вывести количество элементов в каждой группе, если оно больше 1.
Для n=3 дело проще, потому что таких групп максимум одна, поэтому тут, по сути, неоднозначности не возникает (за исключением того, что в первом пункте...)
В общем, решил делать как во втором пункте. ответ в любом случае будет верным.*/
#include <iostream>
using namespace std;
int n, result = 0;
int **ar;//указатель на указатель для создания динамического двумерного массива
bool *Flag;//указатель на первый элемент массива флагов
void create(int n)//создание динамического массива
{
ar = new int*[n];
for (int i = 0; i < n; i++)
ar[i] = new int[n];
Flag = new bool[n];
for (int i = 0; i < n; i++)
Flag[i] = false;
}
void inp(int n) //ввод элементов массива
{
cout << "Input rows of matrix:\n";
for (int i = 0; i < n; i++)
{
cout << i + 1 << ": ";
for (int j = 0; j < n; j++)
cin >> ar[i][j];
}
}
void outp(int n) //вывод элементов массива
{
cout << "Elements of matrix:\n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << ar[i][j] << " ";
cout << endl;
}
}
bool isEqual(int n, int j1, int j2)//проверка на равенство столбцов
{
bool res = true;
for (int i = 0; i < n; i++)
{
if (ar[i][j1] != ar[i][j2])
{
res = false;
break;
}
}
if (res)//если столбцы равны
Flag[j2] = true; /*отмечаем столбец как просмотренный, чтобы в следующий раз его не сравнивать с другими столбцами*/
return res;
}
void calculate(int n)//считаем количество совпадающих столбцов
{
int k = 1;
for (int j1 = 0; j1 < n; j1++)
if (!Flag[j1])
{
k = 1;
for (int j2 = j1 + 1; j2 < n; j2++)
if (!Flag[j2] && isEqual(n, j1, j2))
k++;
if (k > 1)//имеется k одинаковых стобцов по типу столбца j1
result += k;//плюсует к итоговому результату
}
}
int main(){
cout << "Input n: ";
cin >> n;
create(n);
inp(n);//ввод массива
outp(n);//вывод массива
calculate(n);//расчет того, что требуется
if (result > 0)/*количество столбцов, которые совпадают, по крайней мере, с одним из других столбцов*/
cout << "The number of columns, coinciding with at least one other column, is " << result << endl;
else //все столбцы разные
cout << "There is no matching columns\n";
return 0;
}