Другие языки программирования и технологии
Решить в Паскале! Срочно плз
Дан двумерный массив. Найти: Положительные элементы массива и их произведение.

А вот веселый велосипед)
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.
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.
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.
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 не впихнуть!
А какое может быть произведение если все 100 значений будут хотя бы равны 2?
Это будет 1267650600228229401496703205376.
Даже в int64 не впихнуть!
Похожие вопросы
- помогите решить задачу паскаль срочно нужно ответ напишите
- Срочно плз!!! Решить в Паскале
- Помогите с программой в Паскале, срочно!
- ЗАДАЧА ПАСКАЛЬ СРОЧНО
- Помогите решить задачу Паскаль
- помогите составить программу на паскале, срочно..
- Вопрос по паскалю!!! Срочно надо, плиз!!!
- Паскаль. СРОЧНО ;( Выяснить принадлежит ли точка (x;y) кругу единичного радиуса с центром в начале координат
- вычислить ряд 1/2+1/3+1/4... с точностью 0,1 в Турбо Паскаль. срочно, пожалуйста помогите!!!
- помогите написать прогу в паскале срочно!!
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