Закон распределения дискретной двумерной случайной величины (X,Y) задан в таблице Найти: а) Законы распределения одномерных случайных величин X и Y; б) Условные законы распределения случайной величины X при условии Y=2 и случайной величины Y при условии X=1; в) вычислить P(Y>X); г) определить ковариацию и коэффициент корреляции случайных величин X и Y
//дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от -10 до 20. //Составьте программу, которая подсчитывает и выводит среднюю температуру по всем дням, //когда были заморозки. Гарантируется, что хотя бы в один день были заморозки
var i,x,y : shortint; s : real; t : array [1..30] of shortint; begin randomize; For i:=1 to 30 do begin t[i]:=random (31)-10; //заполняем таблицу случайным образом (в диапазоне от -10 до 20) writeln (i,' ',t[i]); //строка не обязательная просто позволяет увидеть заполненный массив end; for i:=1 to 30 do begin if t[i]<0 then begin x:=x+t[i]; y:=y+1; end; end; s:=x/y; writeln ('Средняя температура по дням, когда были заморозки ',s:0:2); end.
Посмотрим, как же нам решить задачу. Сначала, поймём как обнулить бит. Бит можно обнулить если использовать логическое И с нулём. Значит, нам нужно использовать логическое И на нужном бите. Как же это сделать? В С++ есть побитовые операции между двумя числами, но побитовое И (&) применяется между всеми битами двух чисел, т.е.
Заметим, что
Числа в С++ с фиксированной разрядностью, т.е. битов всегда определённое кол-во. Исходя из условий задачи, тут нужен int - 32-битный тип.
Тогда, чтобы обнулить нужный бит, нам нужно использовать побитовое И с таким числом, что все его биты, кроме нужного, равны 1.
Добиться этого мы сможем следующим образом. Сдвинем 1 влево на k бит и получим такое число, что все биты, кроме k-го равны 0, а k-ый равен 1, и используем побитовую инверсию (~), т.е. инвертируем каждый бит в числе.
Получив нужное число, выполняем побитовое И и обнуляем k-ый бит.
//Составьте программу, которая подсчитывает и выводит среднюю температуру по всем дням,
//когда были заморозки. Гарантируется, что хотя бы в один день были заморозки
var i,x,y : shortint;
s : real;
t : array [1..30] of shortint;
begin
randomize;
For i:=1 to 30 do
begin
t[i]:=random (31)-10; //заполняем таблицу случайным образом (в диапазоне от -10 до 20)
writeln (i,' ',t[i]); //строка не обязательная просто позволяет увидеть заполненный массив
end;
for i:=1 to 30 do
begin
if t[i]<0 then
begin
x:=x+t[i];
y:=y+1;
end;
end;
s:=x/y;
writeln ('Средняя температура по дням, когда были заморозки ',s:0:2);
end.
Код в приложении.
Пояснения:
Посмотрим, как же нам решить задачу. Сначала, поймём как обнулить бит. Бит можно обнулить если использовать логическое И с нулём. Значит, нам нужно использовать логическое И на нужном бите. Как же это сделать? В С++ есть побитовые операции между двумя числами, но побитовое И (&) применяется между всеми битами двух чисел, т.е.
Заметим, что
Числа в С++ с фиксированной разрядностью, т.е. битов всегда определённое кол-во. Исходя из условий задачи, тут нужен int - 32-битный тип.
Тогда, чтобы обнулить нужный бит, нам нужно использовать побитовое И с таким числом, что все его биты, кроме нужного, равны 1.
Добиться этого мы сможем следующим образом. Сдвинем 1 влево на k бит и получим такое число, что все биты, кроме k-го равны 0, а k-ый равен 1, и используем побитовую инверсию (~), т.е. инвертируем каждый бит в числе.
Получив нужное число, выполняем побитовое И и обнуляем k-ый бит.
Как работают примеры:
И второй пример: