01.12.2009, 17:30
общий
это ответ
Здравствуйте, awards1204. Процедуры по обоим заданиям собраны в одной программе. Для универсальности использованы: процедурный тип, что позволяет находить число элементов по любым условиям без изменения процедуры ElementsCount. Указатели использованы, чтобы передавать в процедуры массив любого размера (передается адрес первого элемента и число элементов). Программа в приложении. Turbo Pascal.
Приложение:
program p174653;
{
Одномерный массив
1) даны 3 последовательных целых чисел. найти мин.элемент в каждой последовательности.
2) дано 3 последовательности. Найти в каждом, количество положительныъ элементов,
количество отрицательных элементов и количество элементов которые = 0.
}
const
MaxSize = 100;
type
TVector = array[1..MaxSize] of integer;
TPtr = ^integer;
TFunc = function(value:integer): boolean;
var
v1, v2, v3: TVector;
i: integer;
size1, size2, size3: integer;
min1, min2, min3: integer;
Positives1, Positives2, Positives3: integer;
Negatives1, Negatives2, Negatives3: integer;
Zeros1, Zeros2, Zeros3: integer;
{$F+}
function IsPositive(value: integer):boolean;
begin
IsPositive := value > 0;
end; { IsPositive }
{$F-}
{$F+}
function IsNegative(value: integer):boolean;
begin
IsNegative := value < 0;
end; { IsNegative }
{$F-}
{$F+}
function IsZero(value: integer):boolean;
begin
IsZero := value = 0;
end; { IsZero }
{$F-}
procedure InputVector(vptr: TPtr; var size : integer);
var
i: integer;
begin
writeln;
write('Размер массива =');
readln(size);
for i:= 1 to size do
begin
write('v[',i,']=');
readln(vptr^);
inc(vptr);
end;
end; { InputVector }
procedure PrintVector(vptr: TPtr; size : integer);
var
i: integer;
begin
for i:= 1 to size do
begin
write(vptr^, ';');
inc(vptr);
end;
writeln;
end; { PrintVector }
procedure MinSearch(vptr: TPtr; size : integer; var min: integer);
var
i: integer;
begin
min := vptr^;
for i:= 2 to size do
begin
inc(vptr);
if vptr^<min then
min := vptr^;
end;
end; { MinSearch }
procedure ElementsCount(
vptr: TPtr;
size : integer;
f: Tfunc;
var count: integer);
var
i: integer;
begin
count := 0;
for i:= 1 to size do
begin
if f(vptr^) then
inc(count);
inc(vptr);
end;
end; { ElementsCount }
procedure ProcessVector(
heading: string;
vptr: TPtr;
size: integer;
var min: integer;
var Positives: integer;
var Negatives: integer;
var Zeros: integer);
begin
InputVector(vptr, size);
MinSearch(vptr, size, min);
ElementsCount(vptr, size, IsPositive, positives);
ElementsCount(vptr, size, IsNegative, negatives);
ElementsCount(vptr, size, IsZero, zeros);
writeln(heading);
PrintVector(vptr, size);
writeln('минимальный =', min);
writeln('положительных=', positives);
writeln('отрицательных=', negatives);
writeln('нулевых =', zeros);
end; { ProcessVector }
begin { Main }
ProcessVector('Первая последовательность',
@v1, size1, min1, positives1, negatives1, zeros1);
ProcessVector('Вторая последовательность',
@v2, size2, min2, positives2, negatives2, zeros2);
ProcessVector('Вторая последовательность',
@v3, size3, min3, positives3, negatives3, zeros3);
readln;
end.