Другие языки программирования и технологии

Решить в Паскале! Срочно плз

Дан двумерный массив. Найти: Положительные элементы массива и их произведение.
Burak Bjk
Burak Bjk
97
Роман Чиботар
Роман Чиботар
56 688
Лучший ответ
А вот веселый велосипед)

type bigint = class
private
digits: List;
public
constructor Create; // По умолчанию
begin
self.digits := new List;
end;
constructor Create(s: string); // Из строки
begin
self.digits := new List;
for var i := s.Length downto 1 do self.digits.Add(s[i].ToDigit);
end;
static procedure operator*=(var x: bigint; a: integer);
begin
if a = 0 then begin x.digits.RemoveAll(x -> true); x.digits.Add(0); end;
var y := x;
for var i := 1 to a-1 do x := x + y;
end;
static function operator+(x, y: bigint): bigint;
var z := new bigint;
var d: integer; // Перенос в старший разряд
begin
while x.digits.Count <> y.digits.Count do // Дополнить нулями до размера
if x.digits.Count < y.digits.Count then x.digits.Add(0)
else y.digits.Add(0);
for var i := 0 to x.digits.Count-1 do // Сложение
if x.digits[i] + y.digits[i] + d < 10 then begin // Без переноса
z.digits.Add(x.digits[i] + y.digits[i] + d);
d := 0;
end
else begin // С переносом
z.digits.Add((x.digits[i] + y.digits[i] + d) mod 10);
d := 1;
end;
if d > 0 then z.digits.Add(d); // Добавить разряд
while x.digits.Item[x.digits.Count-1] = 0 do // Убрать нули в начале
x.digits.RemoveAt(x.digits.Count-1);
while y.digits.Item[y.digits.Count-1] = 0 do
y.digits.RemoveAt(y.digits.Count-1);
Result := z;
end;
function ToString: string; override;
var s: string;
begin
for var i := self.digits.Count-1 downto 0 do s += self.digits[i];
Result := s;
end;
end;
begin
var p := new bigint('1');
var a: array[1..10,1..10] of integer;
for var i := 1 to 10 do begin
for var j := 1 to 10 do begin
a[i,j] := 2;
print(a[i,j]);
if a[i,j] > 0 then p *= a[i,j];
end;
println;
end;
p.ToString.Println;
end.
Евген Файзрахманов 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2
1267650600228229401496703205376
program z;
var i,j,p,s,n,m:integer;
a:array [1..10,1..10] of integer;
begin
writeln('Введите кол-во столбцов');
readln(n);
writeln('Введите кол-во строк');
readln(m);
writeln('Ввод матрицы');
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']=');
readln(a[i,j]);
end;
writeln('Вывод матрицы');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j],' ');
writeln;
end;
s:=0;
p:=1;
for i:=1 to n do
for j:=1 to m do
if a[i,j]>0
then
begin
s:=s+a[i,j];
p:=p*a[i,j];
end;
writeln('Произведение положительных элементов - ',p);
writeln('Сумма положительных элементов - ',s);
end.
Роман Чиботар a:array [1..10,1..10] of integer;

А какое может быть произведение если все 100 значений будут хотя бы равны 2?

Это будет 1267650600228229401496703205376.
Даже в int64 не впихнуть!