Информатика_всем
.pdfend;
//вывод файла до изменения reset(f);
writeLn('файл f до изменения:'); while not EOF(f) do
begin read(f,b); write(b:5);
end;
writeLn;
//увеличение на 5 в файле элементов, больших
//четырех, не стоящих на позициях, кратных трем reset(f);
while not EOF(f) do begin
read(f,b);
if (b>4) and ((filepos(f)-1) mod 3 <> 0)
then
begin seek(f,filepos(f)-1); b:=b+5;
write(f,b);
end;
end;
//вывод файла после изменения reset(f);
writeLn('файл f после изменения:'); while not EOF(f) do
begin read(f,b); write(b:5);
end;
writeLn;
close(f);
end.
39
ДОПОЛНИТЕЛЬНАЯ ЧАСТЬ
16. ОДНОМЕРНЫЕ МАССИВЫ
Ввести одномерный массив A , вывести его. Определить k – сколько раз в нем встречаются две тройки, идущие подряд. Если таковых нет, то за-
менить нулями минимальный элемент среди тех, что стоят на нечетных позициях, а если есть, то поменять максимум среди элементов располо-
женных после A [k], с первым элементом массива.
Б л о к - с х е м а к з а д а ч е № 1 6
Начало
Ввод N
i := 1 , N
Ввод A[i]
i := 1 , N
Вывод A[i]
k:=0
i := 1 , N-1
(A[i]=3) and (A[i+1]=3)
k := k+1
1
стр. 43
40
|
1 |
|
|
стр. 42 |
|
|
k = 0 |
|
'В массиве |
|
|
нет серий из |
Вывод k |
|
двух троек' |
||
|
||
Imin:=1 |
Imax:=k+1 |
|
i := 1 , N |
i := k+1 , N |
|
(A[i]<A[Imin]) |
A[i]>A[Imax] |
|
and (i mod 2=0) |
||
|
||
Imin:=i |
Imax:=i |
|
|
buf:=A[1] |
|
|
A[1]:=A[Imax] |
|
A[Imin]:=0 |
|
|
|
A[Imax]:=buf |
|
|
i := 1 , N |
|
|
Вывод A[i] |
Конец
41
Л и с т и н г п р о г р а м м ы н а P a s c a l к з а д а ч е № 1 6
program Z16; const Nmass=100;
var A:array[1..Nmass] of integer; N,i,k,Imax,Imin: byte; buf:integer;
begin cls;
writeLn('Введите число элементов в массиве A'); readLn(N);
writeLn('Вводим элементы массива A:'); for i:=1 to N do
begin write('A[',i,']='); readLn(A[i]);
end;
//вывод массива до измененния writeLn('Исходный массив A:'); for i:=1 to N do
write(A[i]:5);
writeLn;
//определение серий троек k:=0;
for i:=1 to N-1 do
if (A[i]=3) and (A[i+1]=3) then k:=k+1;
//проверка условия наличия серий троек if k=0 then
begin
WriteLn('В массиве нет серий из двух
троек');
42
//если троек нет, то k=0, //потому обнуляем минимум
//среди элементов, стоящих на нечетных
местах
Imin:=1;
for i:=1 to N do
if (A[i]<A[Imin]) and (i mod 2=0) then Imin:=i;
A[Imin]:=0; end
else begin
WriteLn('В массиве всего ',k,' серий из двух
троек');
//если k>0, то ищем максимум //среди элементов после A[k] Imax:=k+1;
for i:=k+1 to N do
if A[i]>A[Imax] then Imax:=i;
//замена в 3 действия buf:=A[1]; A[1]:=A[Imax]; A[Imax]:=buf;
end;
//вывод массива поле измененния writeLn;
writeLn('массив A после изменения:'); for i:=1 to N do
write(A[i]:5);
end.
43
17. ДВУМЕРНЫЕ МАССИВЫ
Ввести двумерный массив AN M , вывести его. Определить k – номер
столбца, содержащего наибольшее количество положительных элементов. Далее найти максимум среди отрицательных элементов, расположенных правее этого столбца, и поменять его с первым элементом массива.
Б л о к - с х е м а к з а д а ч е № 1 7 |
|
|
|
|
1 |
Начало |
|
i := 1 , N |
|
|
|
Ввод N, M |
|
A[ i, 1 ]>0 |
|
|
|
i := 1 , N |
Pmax:= Pmax+1 |
|
|
|
|
j := 1 , M |
|
|
|
|
k:=1 |
Ввод A[i, j] |
|
|
|
|
j := 2 , M |
i := 1 , N |
|
p:=0 |
j := 1 , M |
|
i := 1 , N |
|
|
|
Вывод A[i, j] |
|
A[ i, j ]>0 |
|
|
|
|
p := p+1 |
|
Перевод |
|
|
строки |
|
|
Pmax:=0 |
|
p > Pmax |
|
|
|
|
Pmax := p |
|
1 |
|
|
|
k := j |
|
|
|
1 |
|
|
стр. 47 |
|
44 |
|
2 |
|
|
|
1 |
|
|
стр. 46 |
|
i := 1 , N |
|
|
|
вывод k |
|
j := 1 , M |
|
|
Вывод A[i, j] |
k < M |
|
|
|
|
|
|
‘Справа от |
|
ZAMOK:=TRUE |
найденного |
|
столбца нет |
|
|
|
|
Перевод |
|
элементов’ |
строки |
|
|
|
j := k+1 , M |
|
Конец |
i := 1 , N |
|
|
|
|
|
A[i, j]<0 |
|
|
ZAMOK |
|
Imax:=i; |
|
|
Jmax:=j |
A[i, j]>A[imax, jmax] |
|
ZAMOK:= |
Imax:=i; |
|
Jmax:=j |
|
|
FALSE |
|
|
|
|
|
|
ZAMOK |
|
‘Справа от |
buf:=A[1,1] |
|
найденного |
|
|
столбца нет |
|
|
отрицательных |
A[1,1]:=A[Imax, Jmax] |
|
элементов’ |
|
|
|
A[Imax, Jmax]:=buf |
|
2
Л и с т и н г п р о г р а м м ы н а P a s c a l к з а д а ч е № 1 7
program Z17;
const Nmass=10;
var A:array[1..Nmass,1..Nmass] of integer;
ZAMOK:boolean;
45
N,M,i,j,k,Imax,Jmax,p,Pmax: byte; buf:integer;
begin cls;
writeLn('Введите число элементов в массиве A'); readLn(N,M);
writeLn('Вводим элементы массива A:'); for i:=1 to N do
for j:=1 to M do begin
write('A[',i,',',j,']=');
readLn(A[i,j]);
end;
writeLn('Исходный массив A:'); for i:=1 to N do
begin
for j:=1 to M do write(A[i,j]:5);
writeLn;
end;
//определение столбца, в котором больше
//положительных элементов подсчет
//положительных в первом столбце
Pmax:=0;
for i:=1 to N do if A[i,1]>0 then
Pmax:=Pmax+1;
//теперь, зная начальное значение Pmax,
//можем приступить к поиску максимума и
46
//k-номера столбца, содержащего
//наибольшее число положительных элементов
k:=1;
for j:=2 to M do begin
p:=0;
for i:=1 to N do if A[i,j]>0 then
p:=p+1; if p>Pmax then
begin Pmax:=p; k:=j;
end;
end;
writeLn('больше всего положительных элементов в столбце номер ', k);
//теперь ищем максимум среди отрицательных в
//столбцах справа от k-го
if k<M then begin
ZAMOK:=TRUE;
for j:=k+1 to M do for i:=1 to N do
if A[i,j]<0 then if ZAMOK then
begin Imax:=i; Jmax:=j;
47
ZAMOK:=FALSE; end
else
if A[i,j]>A[imax, jmax] then begin
Imax:=i;
Jmax:=j;
end; if ZAMOK then
writeLn('справа от найденного столбца нет отрицательных элементов')
else begin
buf:=A[1,1];
A[1,1]:=A[Imax,Jmax];
A[Imax,Jmax]:=buf;
end;
end else
writeLn('справа от найденного столбца нет элементов');
writeLn;
writeLn('массив A после изменения:'); for i:=1 to N do
begin
for j:=1 to M do write(A[i,j]:5);
writeLn;
end;
end.
48