1. Определяем количество байт, необходимое для отображения 16777216 цветов. Те, кто немного "в теме" и так знают, что 16 млн. цветов - это "трехбайтный" цвет, когда на каждый канал RGB - красный, зеленый и синий отводится ровно один байт. А остальным придется немного повычислять. a) Можно идти по пути умножения, если у нас калькулятор на четыре действия арифметики. Вспомним, что 1024 байта (1 Кбайт) - это 2¹⁰ байт (поэтому они и "кило" байт). Забываем про байты, но получаем знание о том, что десятая степень двойки - это 1024. Умножаем 1024 само на себя, получая 1048576- это квадрат, т.е. 20-я степень. А дальше удваиваем, получая 2097152, 4194304, 8388608 и 16777216. Вот оно, наше число. Умножали 4 раза, значит окончательно степень 24. 24 бита делим на 8, получая 3 байта. б) Если у нас есть логарифмы, то решаем уравнение 2ⁿ=16777216. n = ㏒₂16777216 = 24. Кто не может вычислять логарифмы по основанию 2, тот вычисляет n=㏑(16777216)/㏑(2)
2. Теперь найдем, сколько же надо всего пикселей. 1600 х 1200 = 1920000. Немало, да еще каждый пиксель требует 3 байта на свой цвет. В целом все эти пиксели займут 1920000 х 3 = 5760000 байт.
3. Переведем полученный объем памяти в килобайты и мегабайты. 5760000 / 1024 = 5625 Кбайт. 5625 / 1024 ≈ 5.5 Мбайт.
4. Смотрим, что нам предлагают не ниже этих значений. Только 64 Мбайта. Придется брать такую карту, потому что 4 Мбайта не хватит.
// PascalABC.NET 3.1, сборка 1192 от 07.03.2016 begin // инициализация var b:=MatrixRandom(3,3,10,99); // вывод Writeln('Исходная матрица'); for var i:=0 to 2 do begin for var j:=0 to 2 do Write(b[i,j]:3); Writeln end; // транспонирование for var i:=0 to 2 do for var j:=i+1 to 2 do if i<>j then Swap(b[i,j],b[j,i]); // вывод Writeln('Транспонированная матрица'); for var i:=0 to 2 do begin for var j:=0 to 2 do Write(b[i,j]:3); Writeln end end.
Те, кто немного "в теме" и так знают, что 16 млн. цветов - это "трехбайтный" цвет, когда на каждый канал RGB - красный, зеленый и синий отводится ровно один байт. А остальным придется немного повычислять.
a) Можно идти по пути умножения, если у нас калькулятор на четыре действия арифметики. Вспомним, что 1024 байта (1 Кбайт) - это 2¹⁰ байт (поэтому они и "кило" байт). Забываем про байты, но получаем знание о том, что десятая степень двойки - это 1024. Умножаем 1024 само на себя, получая 1048576- это квадрат, т.е. 20-я степень. А дальше удваиваем, получая 2097152, 4194304, 8388608 и 16777216. Вот оно, наше число. Умножали 4 раза, значит окончательно степень 24. 24 бита делим на 8, получая 3 байта.
б) Если у нас есть логарифмы, то решаем уравнение 2ⁿ=16777216.
n = ㏒₂16777216 = 24. Кто не может вычислять логарифмы по основанию 2, тот вычисляет n=㏑(16777216)/㏑(2)
2. Теперь найдем, сколько же надо всего пикселей.
1600 х 1200 = 1920000. Немало, да еще каждый пиксель требует 3 байта на свой цвет. В целом все эти пиксели займут 1920000 х 3 = 5760000 байт.
3. Переведем полученный объем памяти в килобайты и мегабайты.
5760000 / 1024 = 5625 Кбайт.
5625 / 1024 ≈ 5.5 Мбайт.
4. Смотрим, что нам предлагают не ниже этих значений. Только 64 Мбайта. Придется брать такую карту, потому что 4 Мбайта не хватит.
ответ: 64 Мбайта
begin
// инициализация
var b:=MatrixRandom(3,3,10,99);
// вывод
Writeln('Исходная матрица');
for var i:=0 to 2 do begin
for var j:=0 to 2 do Write(b[i,j]:3);
Writeln
end;
// транспонирование
for var i:=0 to 2 do
for var j:=i+1 to 2 do
if i<>j then Swap(b[i,j],b[j,i]);
// вывод
Writeln('Транспонированная матрица');
for var i:=0 to 2 do begin
for var j:=0 to 2 do Write(b[i,j]:3);
Writeln
end
end.
Тестовое решение:
Исходная матрица
48 30 15
38 49 19
21 15 41
Транспонированная матрица
48 38 21
30 49 15
15 19 41