Произведение первого, третьего и шестого положительных элементов массива

Задача

Для одномерного массива вычислить произведение первого, третьего и шестого положительных элементов и определить их номера в массиве.

Решение

 

Алгоритм решения задачи: 

  1. Если очередной элемент массива больше 0, то
  2. увеличить счетчик положительных элементов,
  3. если этот счетчик равен 1, 3, или 6, то записать в отдельные переменные номера элементов массива,
  4. когда счетчик положительных элементов был равен 6, прервать цикл.
  5. Вычислить произведение, если были найдены все три положительных элемента.

Программа на языке Паскаль: 

 

const n=20;
var 
	arr: array[1..n] of integer;
	i, j, i1,i3,i6: byte;
	mult: integer;
begin
	randomize;
	for i:=1 to n do begin
		arr[i] := random(50) - 25; // диапазон [-25;24]
		write(arr[i]:4);
	end; writeln;
 
	i1 := 0; // индексы соответствующих полож. элементов
	i3 := 0;
	i6 := 0;
	j := 0; // индекс очередного положительного элемента
	for i:=1 to n do begin
		if arr[i] > 0 then begin
			j := j + 1;
			if j = 1 then i1 := i 
			else
				if j = 3 then i3 := i
				else
					if j = 6 then begin i6 := i; break end;
		end;
	end;
 
	if (i1<>0) and (i3<>0) and (i6<>0) then begin
		mult := arr[i1] * arr[i3] * arr[i6];
		writeln('ID elements: ',i1,' ',i3,' ',i6);
		writeln('Mult: ', mult);
	end;
end.

 

Пример выполнения программы:

  -4  16  22  18 -11  -8 -15   5 -22 -18 -16  21 -12 -10   1  23 -17  -6  22  12
ID elements: 2 4 15
Mult: 288

 

Примечания: 

Если не требуется определять индексы элементов массива, то код цикла поиска соответствующих элементов может выглядеть так (произведение вычисляется сразу, переменные i1, i3, i6 не нужны):

...
	j := 0; // индекс очередного положительного элемента
	mult := 1;
	for i:=1 to n do begin
		if arr[i] > 0 then begin
			j := j + 1;
			if (j=1) or (j=3) or (j=6) then
				mult := mult * arr[i];
		end;
	end;
 
	writeln('Mult: ', mult);
end.

 

Тема

Одномерные массивы

Уровень

Комбинированные задачи

Комментарии

Вот мой пример решения. Работает. Только программа показывает еще значения элементов массива.

program name;
var 
    a:array[1..100] of shortint;
    p:array[1..100] of byte;
    b:array[1..100] of byte;
    i,n:byte;
    pol:byte := 1;
    proizved: integer := 0;
begin
randomize;
write('Введите размерность массива    '); readln(n);
writeln('Вывод случайного массива:');
for i:=1 to n do begin
  a[i]:=random(200)-100; 
  write(a[i], ' ');
  end;
writeln;  
for i:=1 to n do begin
  if a[i]>0 then begin
    p[pol]:= a[i];
    b[pol]:=i;
    pol:=pol + 1;
 
  end;
end;
proizved:=p[1]*p[6]*p[3];
writeln('Произведение первого,третьего и шестого положительного элемента в массиве = ');
writeln(proizved);
writeln('Номер первого положительного элемента в массиве = ', b[1]);
writeln('Номер третьего положительного элемента в массиве = ', b[3]);
writeln('Номер шестого положительного элемента в массиве = ', b[6]);
writeln('Первый положительный элемент массива = ', p[1]);
writeln('Третий положительный элемент массива = ', p[3]);
writeln('Шестой положительный элемент массива = ', p[6]);
readln;
end.

Добавить комментарий