Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика_всем

.pdf
Скачиваний:
76
Добавлен:
03.03.2016
Размер:
5.42 Mб
Скачать

end;

//вывод файла до изменения 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