Рубрики
ЕГЭ Информатика

Const N=IO; Var AzВ: array [1..N] of Integer; I: Byte; Begin for 1:=1 to N do begin…

Const N=IO;

Var AzВ: array [1..N] of Integer;

I: Byte;

Begin for 1:=1 to N do begin

Write (‘Введите A[‘z Iz’]: ‘);

Readln(A[I]) end;

For 1:=1 to N do

B fl] :=A[N-I + 1] ;

For 1:=1 to N do

Writeln(‘B[‘z Iz’]=’z B[I]);

Readln end.

Const N=10;

Var A: array [1..N] of Integer;

I: Byte;

Chz NCh: Longint; begin

For 1:=1 to N do begin

Write (‘Введите A[‘z Iz’]: ‘);

Readln(A[I]) end;

Ch:=0;

NCh:=0;

For 1:=1 to N do

If A[I] mod 2=0 then Ch:=Ch + A[I] else

NCh:=NCh + A [ I ] ;

Writeln(‘Четные — нечетные = ‘z Ch-NCh); Readln end.

Приведем только тело второго цикла, считающего суммы. В остальном решение в точности совпадает с решением предыдущей задачи, for 1:=1 to N do if I mod 2=0 then

Ch:=Ch + A[I] else

NCh:=NCh + A[I]

4 Const N=10;

Var A: array [1..N] of Integer;

I: Byte;

S: Boolean;

Begin

For 1:=1 to N do

Begin

Write (‘Введите A[‘z Iz’]: ‘); Readln(A[I])

End;

S :=True;

For 1:=1 to (N div 2) do

If A[I] <> A[N-I+1] then S:=False;

If S then

Writeln(‘Массив симметричный’) else

Writeln(‘Массив не симметричный’); Readln

End.

5 Const N=10;

Var A: array [1..N] of Integer;

Iz J: Byte;

S: Boolean;

Begin

For 1:=1 to N do

Begin

Write (‘Введите A[‘z Iz’]: ‘); Readln(A[I]) end;

S :=True;

For 1:=1 to N-I do

For J:=I+1 to N do if A[I] = A[J] then S :=False;

If S then

Writeln(‘Все элементы разные’) else

Writeln(‘Есть повторяющиеся элементы’); Readln

End.

Const N=10;

Var A: array [1..N] of Integer;

IrМ: Byte;

S: Longint;

Begin

For 1:=1 to N do begin

Write (’Введите A[‘r Ir’]: ‘);

Readln(A[I])

End;

S :=0;

M :=0;

For 1:=1 to N do

If A[I] <0 then begin

S :=S + A[I];

Inc (M) end;

If M>0 then

Writeln (‘Искомое число = ‘r S/M:7:3) else

Writeln (‘Все числа в массиве неотрицательные’); Readln end.

7 Во многих задачниках приводится решение этой задачи за два прохода: сначала ищется максимум, потом подсчитывается, сколько чисел ему равны. Это неэффективное решение. Посмотрите, как легко оба этих действия можно выполнить за один просмотр массива.

Const N=IO;

Var A: array [1..N] of Integer;

IrМ: Byte;

Max: Integer;

Begin

For 1:=1 to N do

Begin

Write (‘Введите A[‘r Ir’]: ‘);

Readln(A[I])

End;

Max :=A[1];

M :=1;

For 1:=2 to N do

If A[I]>Max then

Begin

Max:=A[I];

M:=l

End

Else if A[I]=Max then

Inc(M);

Writeln(‘Максимум = ‘, Max,

‘, всего таких чисел: ‘, М);

Readln

End.

8 Const N=10;

Var A: array [1..N] of Integer;

I, M, Ml: Byte;

Max: Integer;

Begin

For 1:=1 to N do

Begin

Write (‘Введите A[‘, I, ‘]: ‘);

Readln(A[I])

End;

Max :=A[1];

M :=1;

Ml :=1;

For 1:=2 to N do

If A[I]>Max then

Begin

Max :=A[I];

M :=1;

Ml :=1 end

Else if A[I]=Max then Ml :=1;

Writeln(‘Первый максимум A[‘, M, ‘], последний максимум А[‘, Ml, ‘]’);

Readln end.

9 Const N=10;

Var A: array [1..N] of Integer;

I, M: Byte;

Max: Integer;

Begin

For 1:=1 to N do

Begin

Write (‘Введите A[‘, I, ‘]: ‘);

Readln(A [ I ]) end;

M :=0;

If A[1]>A[2] then

Inc(M);

If A[N]>A[N-1] then

Inc(M);

For 1:=2 to N-I do

If A[I]>A[I-1]+A[I+1] then

Inc(M);

Writeln(‘Количество искомых чисел = ,, M) ;

Readln end.

подпись: 10*Способ 1.

Const N=10;

Var A: array [1..N] of Integer;

M: Byte;

Begin

For M:=l to N do

Begin

Write (‘Введите A[‘, M, ,]: ‘);

Readln(A[M])

End;

M :=1;

While (A[N]*A[N-M]>0) and (M

Inc(M);

If (M=N-I) and (A[N]*A[1]>0) then

Inc(M);

If A[N]=0 then

Writeln(‘последнее число O’)

Else

Begin

Write (‘Количество чисел одного знака
в конце = ‘, М, ‘, ‘);

If A[N]>0 then

Writeln(‘знак +’);

If A[N]<0 then

Writeln(‘знак -‘);

End;

Readln end.

Способ 2.

Как говорилось выше, многие задачи, предложенные в этом разделе, мож­но решить без использования массива. Покажем, как это делается, на при­мере этой задачи. Проверка производится во время ввода.

Const N=IO;

Var I, M: Byte;

А, С: Integer;

Begin

M :=0;

For 1:=1 to N do

Begin

Write (‘Введите ‘, Iz’-e число: ‘);

Readln(A);

If I=I then

C: =A;

If A*C>0 then

Inc(M)

Else

Begin

C: =A;

M:=l

End

End;

If A=O then

Writeln(‘последнее число O’)

Else

Begin

Write (‘Количество чисел одного знака в конце = ‘, Mz’z’);

If A>0 then

Writeln(‘знак +’);

If A<0 then

Writeln(‘знак -‘)

End;

подпись: 11Readln end.

В операторе вывода воспользуемся так называемым Форматным выво­дом — укажем, сколько позиций требуется отвести для выводимого значе­ния (в случае вещественного числа требуется также указать, сколько цифр напечатать после запятой).

Var М: Array [1..12]of Integer;

Var j: Integer;

S: Real;

Begin

Writeln(‘Ввод масива’);

For J:=l to 12 do

Begin

Write (‘Введите кол-во осадков в ‘z Jz ‘-м месяце: ‘);

Readln(М[j])

End;

S :=0;

For J:=l to 12 do

S:=S+M[j]; {Нашли общегодовое кол-во осадков} S:=S/12; {Среднегодовое кол-во осадков} Writeln(‘N’:3, ‘кол-во осадков’:15,

‘отклонение’:15); {Напечатали заголовок таблицы} for J:=l to 12 do

Writeln(J:3, M[J]:15, M[J]-S :15:1);

подпись: 12Readln end.

При решении задачи надо попарно сравнивать символы, взятые с нача­ла и с конца, а остановиться, очевидно, посередине. Однако в отличие от предыдущей задачи здесь не всегда надо идти до конца цикла: как только обнаружено первое несовпадение букв, проверку можно прекратить. Ре­зультаты проверки мы будем хранить в логической переменной-флаге Т, Которая равна TRUE, если на данном этапе несовпадений букв не выявлено, и становится равной FALSE, как только проверяемые буквы не совпадут.

Еще одно замечание — относительно описания и ввода массива. Мы не знаем, из скольких букв будет состоять слово, поэтому массив приходит­ся описывать «с запасом» — на 30 элементов, использоваться же будут только NПервых введенных букв.

В Паскале при вводе слово можно записать целиком (не забыв точку в конце!). Оператор READ будет за каждый проход цикла считывать из него по одной букве.

Var Slovo: Array [1..30] of Char;

J, N: Integer;

T: Boolean;

Begin

Writeln(‘Введите слово по буквам, в конце — точка’);

N:=0;

Repeat

N:=N+1;

Read (Slovo[N])

Until Slovo[N]=’.’;

Writeln;

N:=N-I; {слово введено и подсчитано количество букв в слове} T:=TRUE;

For J:=l to N div 2 do

If Slovo[J]<>Slovo[N-J+l] then begin

T:=False;

Break

End;

If not T then Write (‘HE ‘);

Writeln(‘палиндром. ‘);

подпись: 13Readln end.

Число в заданной системе счисления вводится последовательно по циф­рам и сразу производится его перевод в десятичную систему. Если не пе­чатать число в заданной системе счисления, то задачу можно решить без использования массива.

Var С: array [1..20] of Integer;

I, K, CIO, Sis: Integer; { Sis — система счисления} begin

Write (‘Основание системы счисления ‘);

Readln(Sis);

Write (‘Количество цифр в числе: ‘);

Readln(К);

Writeln(‘Цифры числа в ‘, ‘Sis’, ‘-ичной системе счисления’);

ClO:=0;

For i:=l to к do

Begin

Write (I, ‘-я цифра: ‘);

Readln(C[i]);

ClO:=C10*Sis+C[i]

End;

For 1:=1 to K do

Write (C[i]); {Напечатали введенное число}

Write (‘в ‘, sis, ‘-ичной системе = ‘);

Write (СЮ);

Writeln(‘ в десятичной’);

Readln end.

14 Вспомним алгоритм перевода чисел из десятичной системы в £>-ичную. Цифрами числа (начиная с последней) будут остатки от деления числа на Q,А число на каждом шаге будет нацело делиться на Q.

Так как цифры числа будут вычисляться в обратном порядке, сразу их печатать нельзя: придется сначала сохранить их в массиве. Причем этот массив надо заполнять с последней (крайней справа) цифры справа нале­во. При этом важно подсчитать, сколько позиций в массиве будет запол­нено, так как на экран надо выводить только вычисленные цифры числа, а не «мусор», который хранится в незаполненных в программе ячейках массива.

Заметим, что ограничение Q< 10 связано только с тем, что для систем счисления с основанием, превышающим 10, пришлось бы определять до­полнительные символы-цифры; алгоритм же останется без изменений.

Var Qr NlOr Ir J: Integer;

NQ: array [1..20] of Integer;

Begin

Write (‘Основание системы счисления — ‘);

Readln(Q);

Write (‘Число в 10-й системе — ‘);

Readln(NlO);

1:=20;

Repeat

NQ[I]:=NlO mod Q;

1:=1-1;

N10:=N10 div Q;

Until N10=0;

For J:=I+1 to 20 do Write ( NQ[J]);

Writeln end.

15 Const N=10;

Type Massiv= Array [1..N] of Real;

Var Mr Polr Otr: Massiv;

Jr KPolr Kotr: Integer;

Procedure VvodMas (var M: Massiv; N: Integer);

Var J: Integer;

Begin

Writeln (‘Ввод массива’);

For J:=1 to N do begin

Write (‘Введите ‘r jr’-й элемент: ‘); Readln(M[j]) end

End;

Procedure PrintMas (var M: Massiv; N: Integer);

Var J: Integer;

Begin

For J:=l to N do

Write (M[J]r’ ‘);

Writeln

End;

Begin

VvodMas (Mr N);

KPol:=0;

KOtr:=О; {в обоих массивах пока нет элементов} for J:=l to N do

Begin

If M[j]>O then

Begin

KPol:=KPol + l;

Pol[KPol]:=M[J]

End;

If M[J]

Begin

KOtr:=K0tr+l;

Otr[K0tr]:=M[J] end end;

Writeln(‘Исходный массив’);

PrintMas (MrN);

Writeln(‘Положительные числа’);

PrintMas (Pol, KPol);

Writeln(‘Отрицательные числа’);

PrintMas (Otr, KOtr);

Readln

End.

подпись: 16Сохраним первый элемент в переменной X, произведем сдвиг элементов и запишем XНа последнее место.

Const N=IO;

Type Massiv= Array [1..N] of Integer;

Var M: Massiv;

J, X: Integer;

Procedure VvodMas (var M: Massiv; N: Integer);

Var J: Integer;

Begin

Writeln(‘Ввод массива’);

For J:=l to N do

Begin Write (‘Введите ‘, j, ‘-й элемент: ‘); Readln(M[j])

End

End;

Procedure PrintMas (var M: Massiv; N: Integer);

Var J: Integer;

Begin

For J:=l to N do

Write(M[J], ‘ ‘);

Writeln

End;

Begin

VvodMas (M, N);

X:=M[1];

For J:=l to N-I do

M[J]:=M[J+l];

M[N]:=X;

PrintMas (MrN);

Readln end.

подпись: 17Надо подсчитать суммы правой и левой частей и сравнить их. Некоторую сложность представляет разделение массива на две части, потому что та­кое разделение зависит от того, четно ли количество его элементов. Вос­пользуемся операцией поиска остатка от деления MOD: если N mod 2 = 0, значит, N— четное.

Const N=8;

Type Massiv= Array [1..N] of Integer;

Var M: Massiv;

Kr jr Slr Sp: Integer;

Procedure VvodMas (var M: Massiv; N: Integer); var J: Integer;

Begin

Writeln(‘Ввод массива’);

For J:=1 to N do

Begin

Write (‘Введите ‘r jr’-й элемент: ‘);

Readln(M[j])

End

End;

Procedure PrintMas (var M: Massiv; N: Integer);

Var J: Integer;

Begin

For J:=l to N do

Write (M[J]r’ ‘);

Writeln

End;

Begin

VvodMas (Mr N);

PrintMas (MrN);

Sl:=0;

Sp:=0; {B начале суммы правой и левой частей — нулевые}

For J:=l to N div 2 do

Sl∙.=Sl+M[j]; {Найдена сумма левой части}

If N mod 2 =0 then K:=N div 2+1 else

К:=N div 2 + 2;

For J:=K to N do

Sp:=Sp+M[j]; {Найдена сумма правой части} if Sl=Sp then

Writeln(‘билет счастливый’) else

Writeln(‘билет несчастливый’) end.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *