Консультация № 160265
12.02.2009, 08:28
0.00 руб.
0 3 1
C помощью while,for,until.Даны действительные числа а[1..n],b[1..m].В последовательности а[1..n] и в последовательностиb[1..m] все члены, следующие за членом с наибольшим значением, заменить на 0.5.

Обсуждение

Неизвестный
12.02.2009, 09:48
общий
Все три цикла нужно использовать в одной программе? Указанная задача явно решается циклом for...
Неизвестный
12.02.2009, 09:50
общий
нет не в 1й просто нужно 3 варианта решения с этими циклами
Неизвестный
12.02.2009, 10:46
общий
это ответ
Здравствуйте, Гришко Максим Сергеевич!
Вот решение вашей задачи. Реализовано по принципу 3-в-одномПоскольку при помощи разных циклов нужно было ОБРАБАТЫВАТЬ последовательности, процедуры ГЕНЕРАЦИИ последовательности и ПЕЧАТИ едины для всех трех случаев и основаны на цикле FOR. Хотя при необходимости можно поправить и это.


Приложение:
uses crt;
const n = 12;
m = 10;
var a: array[1..n] of real;
b: array[1..m] of real;
i,na,nb:integer;

procedure fillArrays;
var i: integer;
begin
for i:=1 to n do a[i] := 10*random;
for i:=1 to m do b[i] := 10*random;
end;


procedure printArrays;
var i:integer;
begin
writeln ('posledovatelnost a:');
for i:=1 to n do write (a[i]:6:2);
writeln;
writeln ('posledovatelnost b:');
for i:=1 to m do write (b[i]:6:2);
writeln;
end;

procedure findMaxFOR;
var i:integer;
begin
na:=1;
for i:=2 to n do
if a[i]>a[na] then na:=i;
nb:=1;
for i:=2 to m do
if b[i]>b[nb] then nb:=i

end;

procedure replaceAfterMaxFOR;
var i:integer;
begin
if na<n then
for i:=na+1 to n do
a[i]:=0.5;

if nb<m then
for i:=nb+1 to m do
b[i]:=0.5;
end;

procedure findMaxWHILE;
var i:integer;
begin
na:=1;
i:=2;
while i<=n do
begin
if a[i]>a[na] then na:=i;
i:=i+1;
end;

nb:=1;
i:=2;
while i<=m do
begin
if b[i]>b[nb] then nb:=i;
i:=i+1;
end;
end;

procedure replaceAfterMaxWHILE;
var i:integer;
begin

if na<n then
begin
i:=na+1;
while i<= n do
begin
a[i]:=0.5;
i:=i+1;
end;
end;

if nb<m then
begin
i:= nb+1;
while i<=m do
begin
b[i]:=0.5;
i:=i+1;
end;
end;
end;

procedure findMaxREPEAT;
var i:integer;
begin
na:=1;
i:=2;
repeat
if a[i]>a[na] then na:=i;
i:=i+1;
until i>m;

nb:=1;
i:=2;
repeat
if b[i]>b[nb] then nb:=i;
i:=i+1;
until i>m;
end;

procedure replaceAfterMaxREPEAT;
var i:integer;
begin

if na<n then
begin
i:=na+1;
repeat
a[i]:=0.5;
i:=i+1;
until i>n;
end;

if nb<m then
begin
i:= nb+1;
repeat
b[i]:=0.5;
i:=i+1;
until i>m;
end;
end;



BEGIN
clrscr;
randomize;

WRITELN('ISPOLZUEN FOR.');
fillArrays;
writeln('DO:');
printArrays;
findMaxFOR;
replaceAfterMaxFOR;
writeln('POSLE:');
printArrays;
readln;

WRITELN('ISPOLZUEN WHILE.');
fillArrays;
writeln('DO:');
printArrays;
findMaxWHILE;
replaceAfterMaxWHILE;
writeln('POSLE:');
printArrays;
readln;

WRITELN('ISPOLZUEN REPEAT');
fillArrays;
writeln('DO:');
printArrays;
findMaxREPEAT;
replaceAfterMaxREPEAT;
writeln('POSLE:');
printArrays;
readln;


END.
Форма ответа