ИНФОРМАТИКА, МНОГО ! Задачи 1. Напишите функцию, которая находит максимальный элемент переданного ей динамического массива.
2. Напишите рекурсивную функцию, которая считает сумму значений переданного ей динамического массива.
номер два сделайте если можете, по желанию!
На языке Pascal ABC! (в пределах школьной программы 10-11 класса)
(С пояснениями)
// Внимание! Если программа не работает, обновите версию!
№1
begin
var n:=ReadInteger('n=');
Writeln('S=',n*(n+1) div 2)
end.
Пример
n= 15373
S=118172251
№2
begin
var m:=ReadInteger('Количество строк в матрице:');
var n:=ReadInteger('Количество столбцов в матрице:');
Writeln('*** Исходная матрица [',m,',',n,'] ***');
var a:=MatrRandom(m,n,-99,99);
a.Println(4); Writeln(4*a.ColCount*'-');
Writeln('Количество отрицательных элементов построчно:');
a.Rows.Select(r->r.Where(x->x<0).Count).Println
end.
Пример
Количество строк в матрице: 5
Количество столбцов в матрице: 8
*** Исходная матрица [5,8] ***
88 43 64 50 -27 -9 48 55
1 40 -39 -99 -45 -54 17 -77
-33 99 -38 -19 -93 18 -19 -24
17 4 -36 90 98 69 68 35
-35 18 85 54 -74 -69 14 -62
Количество отрицательных элементов построчно:
2 5 6 1 4
Var
S:real;
N:longint;
Begin
Write('n = ');
Read(n);
S:=0;
For n:= 1 to n do
S:=S+n;
WriteLn('S = ',S);
End.
2)
Вариант первый:
Var
A:array[1..10000,1..10000] of shortint;
M,N,j,k:word;
Begin
Randomize;
Write('M = ');ReadLn(M);
Write('N = ');ReadLn(N);
WriteLn('Исходная матрица:');
For M:= 1 to M do
Begin
k:=0;
For j:= 1 to N-1 do
Begin
A[M,j]:=random(21)-10;
Write(A[M,j]:3,' ');
if A[M,j] < 0 then k:=k+1
End;
A[M,j]:=random(21)-10;
Write(A[M,j]:3);
if A[M,j] < 0 then k:=k+1;
WriteLn(', k = ',k)
End;
End.
Вариант второй:
uses Crt;
///На всех версиях, кроме PascalABC.NET эту процедуру следует удалить
procedure Window(x, y, w, h: integer);
begin
System.Console.WindowLeft:=x;
System.Console.WindowTop:=y;
System.Console.WindowWidth:=w;
System.Console.WindowHeight:=h;
end;
Var
A:array[1..13,1..13] of integer;
N,M,i,j,t,o,k:integer;
Begin
Randomize;
TextBackGround(15);
TextColor(0);
Repeat
N:=random(13)+1;
M:=random(13)+1;
t:=3000 div (N*M);
if frac(Ln(N*M)/Ln(10)) = 0 then o:=1+Trunc(Ln(N*M)/Ln(10))
else o:=2+Trunc(Ln(N*M)/Ln(10));
Window(0,0,90,25);
ClrScr;
For i:= 1 to N do
Begin
For j:= 1 to M do
Begin
A[i,j]:=random(N*M*2+1)-(N*M);
Delay(t);
Write(A[i,j]:o,' ')
End;
WriteLn;
End;
TextBackGround(10);
For i:= 1 to N do
Begin
k:=0;
For j:= 1 to M do
Begin
if A[i,j] < 0 then
Begin
TextBackGround(14);
GotoXY(j*(o+1)-o,i);
Write(A[i,j]:o,' ');
TextBackGround(10);
k:=k+1
End
else
Begin
GotoXY(j*(o+1)-o,i);
Write(A[i,j]:o,' ');
End;
Delay(t);
End;
TextBackGround(12);
GotoXY(j*(o+1),i);
Write(', k = ',k);
TextBackGround(10);
End;
TextBackGround(15);
GotoXY(1,N+1);
Write('1 - повторить, 0 - Выйти.');
Until ReadKey = '0'
End.