Const nn = 50; var a,b,nb:array[1..nn] of integer; i,n,j: integer; begin Write('Введите количество элементов в массиве (n<51): '); Read(n); Writeln('Вводите элементы массива'); j:=0; for i:=1 to n do begin Read(a[i]); if a[i]<0 then begin Inc(j); b[j]:=a[i]; nb[j]:=i end end; if j>0 then begin Write('Отрицательные элементы: '); for i:=1 to j do Write(b[i],' '); Writeln; Write('Индексы отрицательных элементов в массиве:'); for i:=1 to j do Write(nb[i]:3); Writeln end end.
Результаты тестирования: Введите количество элементов в массиве (n<51): 9 Вводите элементы массива 3 5 -2 3 -2 0 -6 -8 1 Отрицательные элементы: -2 -2 -6 -8 Индексы отрицательных элементов в массиве: 3 5 7 8
Введите количество элементов в массиве (n<51): 8 Вводите элементы массива -1 -2 -3 -4 0 -1 2 3 Отрицательные элементы: -1 -2 -3 -4 -1 Индексы отрицательных элементов в массиве: 1 2 3 4 6
Тебе из 8 нужно перевести в двоичную, при этом у тебя дробное число. То есть у тебя есть целая часть (247) и дробная часть (16).
Нужно переводить по очереди, вначале целую часть, потом дробную, при этом при переводе целой - нужно делить, при переводе дробной - умножать, сейчас покажу алгоритм.
Вначале целую часть: Мы делим на 2, потом пишем результат деления, а в скобочках пишем остаток. 247/2=123(1) 123/2=61(1) 61/2=30(1) 30/2=15(0) 15/2=7(1) 7/2=3(1) 3/2=1(1)
Теперь нам нужно записать то, что получилось, записывается снизу-вверх, начиная от той единички, что у нас получилась при делении 3 на 2.
Итого: 11110111 - это твоя целая часть.
Теперь дробная часть (16), мы должны приписать ноль, чтобы у нас получилось 0,16 (ведь это дробная часть). Теперь умножаем на 2 пока не получится РОВНО единица, при этом записываем в ответ 0, если у нас целая часть получается ноль и 1, если целая часть получается 1.
Сейчас поймёшь: 0,16 * 2 = 0,32 - видишь, получился ноль, поэтому мы его в ответ пишем и продолжаем умножать на 2 часть после ноля, пока не получится ровно 1. 0,32 * 2 = 0,64 - опять ноль получился, в ответ ноль записываем еще. 0,64 * 2 = 1,28 - тут уже у нас единица получилась, в ответ 1, отбрасываем 1 и опять множим на 2, пока не будет ровно единица в ответе. 0,28 * 2 = 0,56 - в ответ 0 0,56 * 2 = 1,12 - в ответ 1 0,12 * 2 = 0,24 - в ответ 0 0,24 * 2 = 0,48 - в ответ 0 0,48 * 2 = 0,96 - в ответ 0 0,96*2 = 1,92 - в ответ 1 0,92*2 = 1,84 - в ответ 1
У тебя тут такое число, в котором ты бесконечно будешь умножать и у тебя не получится никогда ровно 1(либо получится, но очень не скоро), поэтому просто спроси у учителя, до скольки знаков тебе считать. Я обычно до 5 считал всегда, но тут я тебе показал аж до 10.
Дробная часть получилась такой - 0010100011.
Теперь записываешь целую часть, что получил ранее и дробную, что вычислил сейчас. У тебя получается:
nn = 50;
var
a,b,nb:array[1..nn] of integer;
i,n,j: integer;
begin
Write('Введите количество элементов в массиве (n<51): ');
Read(n);
Writeln('Вводите элементы массива');
j:=0;
for i:=1 to n do
begin
Read(a[i]);
if a[i]<0 then begin Inc(j); b[j]:=a[i]; nb[j]:=i end
end;
if j>0 then begin
Write('Отрицательные элементы: ');
for i:=1 to j do Write(b[i],' ');
Writeln;
Write('Индексы отрицательных элементов в массиве:');
for i:=1 to j do Write(nb[i]:3);
Writeln
end
end.
Результаты тестирования:
Введите количество элементов в массиве (n<51): 9
Вводите элементы массива
3 5 -2 3 -2 0 -6 -8 1
Отрицательные элементы: -2 -2 -6 -8
Индексы отрицательных элементов в массиве: 3 5 7 8
Введите количество элементов в массиве (n<51): 8
Вводите элементы массива
-1 -2 -3 -4 0 -1 2 3
Отрицательные элементы: -1 -2 -3 -4 -1
Индексы отрицательных элементов в массиве: 1 2 3 4 6