Генератор случайных чисел




Сборник задач по темам Паскаля

Управляющие конструкции

1) Задание: y =

Решение:

uses crt;

var

x,y:real;

begin

clrscr;

write('Vvedite znachenie ');

readln(x);

y:=arctan(x)/ ln(2*(x*x))/ln(10);

writeln('Otvet: ',y:5:2);

end;

readln;

end.

2) Задание: Y =

Решение:

uses crt;

var

x,y:real;

begin

clrscr;

write('Vvedite znachenie ');

readln(x);

if x<=5 then begin

y:=5*cos(4*x+4);

writeln('Otvet: ',y:5:2);

end;

if (x>5) and (x<6) then begin

y:=sqr(x);

writeln('Otvet: ',y:5:2);

end;

if x>=6 then begin

y:=ln(sqr(x)*x)/ln(10);

writeln('Otvet: ',y:5:2);

end;

readln;

end.

 

3) Дано натуральное число n. Составить программу, которая подсчитывает сумму цифр данного числа, стоящих на четных местах.

 

 

4) Y =

 

5) Y =

 

4) По длинам трех сторон треугольника а, Ь, с вычис­лить его площадь.

 

Program Geron;

Var A,B,C,P,S: Real;

Begin

WriteLn{'Введите длины сторон треугольника:');

Write('a='); ReadLn(А);

Write('b='); ReadLn(B);

Write ('c='); ReadLn(C);

If (A>0) And (B>0> And (C>0> And (A+B>C)

And (B+OA) And (A+OB)

Then Begin

P:=(A+B+C) /2;

S:=Sqrt(P*(P-A)*(P-B)*(P-C));

WriteLn('Площадь=',S)

End

Else WriteLn('Неверные исходные данные)

End.

 


Циклы

1)Вычислить суммы всех целых чисел от 1 до N.

 

Program Summ_of_Integer;

{Программа вводит целое положительное число N и подсчитывает сумму всех целых чисел от 1 до N}

var

i, n, s: Integer;

begin

Write('N = ');

ReadLn(n);. { Вводим N}

s:= 0; {Начальное значение суммы}

for i: = 1 to n do {Цикл подсчета суммы}

s: = s + i;

writeln('Сумма = ',s) {Выводим результат}

end.

 

2) Составить программу вычисления суммы первых 10 членов последовательности.

 

3) Сост. прог. выч. факториала числа n.

Пример: 5!=1*2*3*4*5

7!=1*2*3*4*5*6*7 }

var f,n,i: integer;

begin

clrscr;

write('n=');readln(n);

f:=1;

for i:=1 to n do f:=f*i;

write('f=',f);

readln;

end.

 

Цикл с параметром

Вывод на экран кубов чисел от 11 до 5

Program Test2;
var
N: integer;
begin
for N:=11 downto 5 do { Счетчик N изменяется с шагом -1 }
write(N*N*N:5); { Эта строка - тело цикла; оно выполняется 8 раз, так как N изменяется от 11 до 5 с шагом -1 }
writeln; { Этот оператор нужен, чтобы закончить вывод чисел в одну строку }
readln
end.

Вычисление суммы чисел от 6 до 10

Program Test4:
var
N: integer; { Это будет счетчик цикла for }
S: integer; { В этой переменной будем накапливать сумму }
begin
S:=0; { Вначале обнулим сумматор }
for N:=6 to 10 do
S:=S + N; { Эта строка - тело цикла. При его выполнении каждый раз к S прибавляется очередное N. Переменную S можно сравнить с аккумулятором, в котором накапливается сумма }
writeln('Сумма чисел=', S:6);
readln
end.

Составить программу вычисления значения выражения y=1+1/2+1/3+... +1/20.

{ В данном случае целесообразно организовать цикл с параметром, изменяющимся от 1 до 20, то есть шаг изменения параметра равен +1. Обозначим: у - очередное значение суммы дробей; n - параметр цикла. Учитывая это, составим программу: }
program prim1;
uses crt;
var n: integer;
y: real;
begin
clrscr;
{ Задаем начальное значение, равное нулю. }
y:=0;
{ Организовываем цикл с параметром от 1 до 20. }
for n:=1 to 20 do
begin
{ Находим очередную сумму. }
y:=y+1/n;
{ Выводим на экран очередную сумму. }
writeln('y=',y);
end.;
end.

Из чисел от 10 до 99 вывести те, сумма цифр которых равна S(0 < S < 18).

{ Обозначим: k - это просматриваемое число; p1 - это первая цифра числа k, р2 - это вторая цифра числа k; s - это сумма цифр данного числа k. Число k будем выписывать только в том случае, когда сумма p1 и р2 будет равна s. }

program prim2;
uses crt;
var k,n,p1,p2,s:integer;
begin
clrscr;
{ Задаем целое число. }
writeln(' целое число n=');
readln(n);
{ Организовываем цикл с параметром от 10 до 99. }
for k:=10 to 99 do
begin
{ Выделяем первую цифру. }
p1:=k div 10;
{ Выделяем вторую цифру. }
р2:=к mod 10;
{ Находим сумму цифр. }
s:=p1+p2;
{ Если сумма цифр равна заданному числу N, то выводим К. }
if s=n then writeln('k= ',k);
end;
end.

Дано натуральное число n (1000<=N<=9999). Определить, является ли оно палиндромом ("перевертышем"), с учетом четырех цифр. Например, палиндромами являются числа: 2222, 6116, 1441.

{ Обозначим: n - вводимое число; m - дубликат числа n; а - перевертыш числа n; i - переменная цикла для создания перевертыша. }

program prim3;
uses crt;
var n, m, a, i: integer;
begin
clrscr;
{ Введем четырехзначное целое число. }
writeln('N<=9999'); readln(n)
{ Запоминаем введенное целое число и задаем начальное значение перевертыша. }
m:=n;а:=0;
{ Организуем цикл с параметром от 1 до 4. }
for i:=l to 4 do
{ Находим перевертыш числа N }
begin
а:=а*10+ m mod 10; m:= m div 10;
end;
{ Если A=N, то данное число является перевертышем. }
if a=n then writeln('DA!')
else writeln('NO');
readln;
end.

Оператор цикла с предусловием

Дано натуральное число n. Посчитать количество цифр в числе.

{ Подсчет количества цифр начнем с последней цифры числа. Увеличим счетчик цифр на единицу. Число уменьшим в 10 раз (тем самым мы избавляемся от последней цифры числа). Далее с получившимся числом проделаем ту же последовательность действий и т. д., пока число не станет равным нулю. Примечание: в теле цикла обязательно должен быть оператор, влияющий на соблюдение условия, в противном случае произойдет зацикливание. }

program prim1;
uses crt;
var m, n: longint;
k: integer; { счетчик цифр }
begin
clrscr;
{ Вводим целое число. }
writeln('Введите N='); readln(n);
{ Запоминаем его и счетчику цифр присваиваем начальное значение. }
m:=n;k:=0;
{ Пока m<>0 делать цикл. }
while m <>0 do
begin
{ "Уменьшаем" число на последнюю цифру, т. е. в 10 раз. }
k:=k+1; m:= m div 10; {Inc(k) }
end;
{ Вывод количества цифр. }
writeln('B числе ',n,'- ',k, ' цифр!');
readln;
end.

Вычислить наибольший общий делитель двух натуральных чисел А и В.

program E6;
var a, b: integer;
begin
write ('введите два натуральных числа');
readln (a, b);
while a<>b do
if a>b then a: = a - b
else b: = b - a;
write ('НОД = ', a);
readln;
end.

Составление таблицы значений функции у = sin х отрезке [0;3.14] с шагом 0,1.

program E10;
var х, у: real;
begin
х: = 0;
writeln ('x': 10,'sinx': 10);
while x < = 3.14 do
begin
y: = sin(x);
writeln (x: 10,' ',y: 7: 5);
x: = x + 0.1
end;
readln
end.

 

Приближенное вычисление суммы бесконечно убывающего ряда 1+x/1!+x2/2!+x3/3!+...

Program Summer2;
var
Eps:real; { Заданное число "эпсилон" }
X: real; { Основание степени в числителе дроби }
S: real; { В этой переменной будем накапливать сумму }
Y; real; { Для хранения очередного слагаемого }
i: integer; { Счетчик числа шагов }
begin
write('Введите X и Epsilon:');
readln(X, Eps);
Y:=l; { Первое слагаемое }
S:=Y; { Положим в сумматор первое слагаемое }
i:=0; { Обнулим счетчик шагов }
while abs(Y)>=Eps do { Пока добавленное слагаемое не меньше "эпсилон", считаем сумму. Если "эпсилон" сразу не меньше 1, цикл не выполнится ни разу! }
begin { Началось тело цикла }
i:=i+l; { Вычислили номер текущего шага }
Y:=Y*X/i; { Посчитали новое слагаемое }
S:=S+Y { Увеличили сумму на текущее слагаемое }
end; { Тело цикла завершилось. После этой строки компьютер перейдет на оператор while для сравнения переменной "эпсилон" с только что добавленным слагаемым }
{ Теперь выведем результат на экран }
Writeln('Сумма чисел=', S:6:4);
readln
end.

 

Возведение числа а, введенного с клавиатуры, в степень n

Program Stp:
var P: real: { Переменная, которая хранит результат очередного шага }
N: integer; { Показатель степени }
i: integer; { Счетчик числа шагов }
A: real; { Основание степени }
begin
write('Введите основание степени:');
readln(A);
write('Введите показатель степени:');
readln(N);
i:=0; { 0-й шаг }
Р:=1; { 20=1 }
while i< abs(N) do { Показатель может быть отрицательным, поэтому используем для анализа его абсолютную величину. Если показатель N=0, то в тело цикла не попадаем ни разу, так как 0-й шаг уже сделан }
begin
i:=i+l; { Увеличиваем i на 1,то есть i теперь равно номеру текущего шага }
Р:=Р*А { Получаем результат i- го шага, то есть A^i }
end;
{ В переменной Р на данный момент получен результат для положительного N }
if N < 0 then { Если показатель N - отрицательный, то результат должен иметь обратную величину }
Р:=1/Р;
writeln('Результат=',Р;6:3);
readln
end.

 

Оператор цикла с постусловием

Использование цикла repeat для подсчета суммы вводимых чисел до первого отрицательного числа

Program Summer1;
var
sum, a: real; { sum - для накопления суммы, a - для очередного числа }
begin
sum:=0; { Обнуляем сумму }
a:=0;
repeat
sum:=sum+a; { Добавляем введенное число к сумме }
write('Введите число'); { Ввод очередного числа }
readln(a)
until a < 0 { Проверяем введенное число на отрицательность }
{ При выходе из цикла выполняется этот оператор: }
writeln ('',sum:5:3);
readln
end.

Составить программу планирования закупки товара в магазине на сумму, не превышающую заданную величину.

{ Обозначим через x, k - соответствующую цену и количество товара, через p - заданную предельную сумму, через s - общую стоимость покупки. Начальное значение общей стоимости покупки (s) равно нулю. Значение предельной суммы считывается с клавиатуры. Необходимо повторять запрос цены и количества выбранного товара, вычислять его стоимость, суммировать ее с общей стоимостью и выводить результат на экран до тех пор, пока она не превысит предельную сумму р. В этом случае на экран нужно вывести сообщение о превышении: }


program prim2;
uses crt;
var c, k, p, s: integer;
begin
clrscr;
{ Вводим наличие денежных средств. }
writeln('Пред. сумма - ');
readln(p);
{ Начальное значение стоимости покупки равно нулю. }
s:=0;
repeat
{ Вводим цену товара и его количество. }
writeln('цена тов. и его кол ');
readln (с, k);
{ Находим стоимость приобретенных товаров. }
s:=s+c*k;
{ Выводим на экран стоимость приобретенных товаров. }
writeln('Стоимость покупки = ', s);
{ Повторяем до тех пор, пока стоимость товара не превысит наличия денежных средств. }
until s>p
writeln('Суммарная стоимость покупки превысила предельную сумму');
readln;
end.

Написать программу нахождения наибольшего общего делителя (НОД) двух натуральных чисел.

{ Для решения данной задачи воспользуемся циклом с постусловием: }

program prim3;
uses crt;
var x, y: integer;
begin
clrscr;
{ Вводим два целых неотрицательных числа. }
writeln('x:=,y: = ');readln(x,y);
repeat
if x>y then x:=x mod у else y:=y mod x;
{ До тех пор, пока одно из чисел не станет равно нулю. }
until (x=0) Or (y=0);
{ Вывод НОД - без условного оператора, так как одно из чисел равно нулю. }
writeln('HOД=',x+y));
readln;
end.

Вложенные циклы

Даны натуральные числа n и k. Составить программу вычисления выражения lk+2k+...+nk.

{ Для вычисления указанной суммы целесообразно организовать цикл с параметром i, в котором, во-первых, вычислялось бы очередное значение y=ik и, во-вторых, осуществлялось бы накопление суммы прибавлением полученного слагаемого к сумме всех предшествующих (s= s+y). }

program prim1;
uses crt;
var n, к, y, i, s, m: integer;
begin
clrscr;
writeln ('n= k='); readln(n, k);
s:=0;
for i:=l to n do
begin
у:=1;
for m:=l to к do
begin
{ Нахождение степени k числа i. }
y: = y*i;
end;
{ Нахождение промежуточной суммы. }
s:=s+y;
end;
writeln(' Ответ: ',s);
readln;
end.

Вычислить сумму 11+22+...+nn.

program prim1;
uses crt;
var n, к, y, i, s, m: integer;
begin
clrscr;
writeln ('n= k='); readln(n, k);
s:=0;
for i:=l to n do
begin
у:=1;
for m:=l to i do
begin
{ Нахождение степени k числа i. }
y: = y*i;
end;
{ Нахождение промежуточной суммы. }
s:=s+y;
end;
writeln(' Ответ: ',s);
readln;
end.

Написать программу, которая находит и выводит на печать все четырехзначные abcd, числа а, b, с, d - различные цифры, для которых выполняется: ab-cd=a+b+c+d.

{ Задачу можно решать несколькими способами. Одним из возможных способов является перебор всех четырехзначных чисел и проверка для каждого из них выполнения условий. Попробуем сократить перебор, для этого преобразуем второе условие:
10а+b-(10c+d)=a+b+c+d;
9(a-c)=2(c+d);
(a-c)/(c+d)=2/9
Проанализировав первое условие, получаем, что а=с+2, d=9-c, следовательно 0<=c<=7.
}

program prim4;
uses crt;
var a,b,c,d: integer;
begin
clrscr;
for c:=0 to 7 do
begin
a:=c+2; d;=9-c;
for b:=0 to 9 do
begin
if (b<>c)and(b<>a)and(b<>d)
then
write(a,b,c,d);
writeln
end;
end;
readln;
end.

{ Таким образом, мы решили задачу, значительно сократив перебор. }

Если мы сложим все цифры какого-либо числа, затем все цифры найденной суммы и будем повторять много раз, мы, наконец, получим однозначное число (цифру), называемое цифровым корнем данного числа. Например, цифровой корень числа 34697 равен 2 (3+4+6+9+7=29; 2+9=11; 1 + 1=2). Составим программу для нахождения цифрового корня натурального числа.

program prim5;
uses crt;
var n, k, s: longint;
begin
clrscr;
writeln(' число='); readln(n);
s:=n;
{ Пока сумма является двузначным числом. }
while s>9 do
begin
k:=s;s:=0;
{ Вычисляем сумму цифр числа. }
repeat
S:=s+k mod 10; k:=k div 10;
until k=0;
end;
writeln(' цифр. корень числа ',n, ' равен ',s);
readln;
end.

 

 


Генератор случайных чисел

Бывают ситуации, когда требуется, чтобы результат работы программы был случайным в определенных пределах. Для реализации такой возможности во многих языках программирования присутствуют встроенные функции, код которых выдает случайные числа. На самом деле числа не совсем случайные, а псевдослучайные. Дело в том, что искусственно реализовать случайность невозможно. Обычно берется некоторый коэффициент, и с его помощью вычисляется каждое последующее «случайное» число.

В языке программирования Паскаль для генерации псевдослучайных чисел в заданных диапазонах используется функция random. Перед ее использованием обычно выполняется процедура инициализации датчика случайных чисел - randomize; иначе программа всегда будет выдавать один и тот же результат. Randomize задает начальное значение последовательности, от которого вычисляются все последующие. При каждом запуске программы это значение будет разным, а значит и результат работы функции random будет различным.

Функция random генерирует случайное число в диапазоне от 0 (включительно) до единицы. Если в скобках указан аргумент, то от 0 до значения указанного в скобках (не включая само значение). Так выражение random (10), говорит о том, что будет получено любое число в диапазоне [0, 10). Если требуется получать значения в каком-либо другом диапазоне (не от нуля), то прибегают к математической хитрости. Например, чтобы получить случайное число от -100 до 100 достаточно записать такое выражение: random (200) – 100. В результате, сначала будет получено число из диапазона [0, 199], а затем из него будет вычтена сотня. И если случайное число было меньше 100, то результат выражения будет отрицательным.

В примере программы сначала с помощью процедуры randomize инициализируется датчик случайных чисел. Далее переменной n присваивается случайное значение в диапазоне [5, 12). Значение переменной n используется для определения количества итераций цикла for. В цикле for генерируются случайные числа в диапазоне [0, 50) и выводятся на экран.

var n, i, x: integer;

Begin

randomize;

n:= random (7) + 5;

for i:= 1 to n do begin

x:= random (100) - 50;

write (x:5)

end;

readln

end.

 

Задача:

Отгадать целое число, которое "загадал" компьютер в определенном диапазоне.

Описание переменных:

a – число, "загаданное" компьютером;
b – очередное число, вводимое пользователем.

Алгоритм решения задачи:

Программа генерирует псевдослучайное число, которое записывается в переменную a.

Пока число a не совпадет с числом b, пользователю будет предлагаться ввести очередное число. При этом, если b > a, то на экран будет выдаваться сообщение "Много". Иначе будет проверяться условие b < a. При его положительном значении появится сообщение "Мало", иначе сообщение "Угадал".

Не трудно понять, что если b не больше и не меньше a, то значит оно равно a. В таком случае логическое выражение при while вернет false, и цикл прервется.

Программа на языке Паскаль:

Var a,b: integer;

Begin

randomize;

a:= random(100);

while a <> b do begin

write('Введи число: ');

readln(b);

if b > a then

writeln('Много')

Else

if b < a then

writeln('Мало')

Else

writeln('Угадал');

end;

 

readln

end.

 


Множества

Даны три множества. Из третьего множества удалить элементы, одновременно принадлежащие первым двум множествам.

program resheto;

uses crt;

var

a,b,c: set of byte;

k:=integer;

begin

clrscr;

A:=[1...8];

B:=[2...7];

C:=[3...8];

For k:=1 to 8 do

If k in c-(a+b) then writeln (k);

End.

 

1. Даны три множества выдать на экран пересечение суммы первых двух множеств с третьим множеством.

2. Даны два множества. Из множества А удалить четные элементы входящие в множество В.

3. Выдать элементы множества А кратные 13 и не входящие в множество В.

4. Даны три множества. Из третьего множества удалить элементы, первого множества не входящие во второе множество.

 


Одномерный массив

 

1) Вычисление суммы элементов массива

Program Summa;

const n=7;

var a:array [1..n] of real;

S:real;

i:integer;

begin

write (‘введите 7 элементов массива, через пробел’);

For i:=1 to n do

readln(a[i]);

S:=0;

For i:=1 to n do

S:=S+a[i];

writeln;

write(‘Сумма всех элементов массива =’,S);

readln;

readln

end.

 

2) Найти min и max значения элементов массива.

Program ss;

const n=10;

var A:array[1..n] of real;

i:integer;

max,min:real;

Begin

for i:=1 to n do

Read(A[i]);

Readln;

max:=A[1];

min:=A[1];

for i:=2 to n do

if A[i]>max then max:=A[i]

else if A[i]<min then min:=A[i];

writeln;

write(max,min);

readln;

end.

 

3) Подсчитать сумму отрицательных элементов массива.

var a: array [1..5] of integer;

i, s: integer;

begin

for i:= 1 to 5 do

read (a[i]);

s:= 0;

for i:= 1 to 5 do

if a[i] < 0 then

s:= s + a[i];

writeln(s) end.

4) Зададим и распечатаем случайный массив из сорока целых чисел:

Program M4;
Const
N=40; {Константа N будет содержать количество элементов массива}
Var
A: Array [1..N] Of Integer;
I: Integer;
Begin
For I:=1 To N Do
Begin
A[I]:= Trunc(Random*101)-50
Write(A[I],'VVV')
End
End.

 

5) Подсчитать количество нулей в массиве.

 

Решение:

 

USES CRT;

var a:array[1..10] of integer;

i,k:integer;

begin

clrscr;

k:=a[1];

writeln('Enter array a'); writeln;

for i:=1 to 10 do readln(a[i]);

for i:=1 to 10 do write(a[i],' ');

k:=0;

for i:=1 to 10 do

begin

if a[i]=0 then k:=k+1;

end;

writeln('kolvo', k);

readln;

end.

 

6) Допустим, имеется одномерный массив, содержащий числа от 0 до 49 включительно. Требуется исключить из него все элементы, значения которых меньше 15.

Алгоритм решения задачи:

Присваивание значение n переменной m требуется, т.к. n - константа и не может быть изменена. Поскольку при "просмотре" массива в цикле while некоторые элементы будут удаляться, то значение m, обозначающее длину массива, будет уменьшаться.

Если очередной элемент не удаляется, то переходим к просмотру следующего элемента (i:= i + 1) и не уменьшаем массив (m не меняется).

Программа на языке Паскаль:

const n = 20;

Var

arr: array [1..n] of integer;

i, j, m: integer;

 

Begin

randomize;

for i:= 1 to n do begin

arr[i]:= random(50);

write(arr[i]:4);

end;

m:= n;

i:= 1;

while i <= m do

if arr[i] < 15 then begin

for j:= i to m - 1 do

arr[j]:= arr[j+1];

m:= m - 1

End

Else

i:= i + 1;

for i:= 1 to m do

write(arr[i]:4);

readln

end.

 

7) Требуется добавить элемент в какое-нибудь место массива.

Алгоритм решения задачи:

1. Задаем длину массива на один элемент больше, чем он будет заполнен в начале.

2. Выясняем значение и позицию добавляемого элемента

3. Все элементы до указанной позиции сдвигаем на один назад.

4. Присваиваем по указанному индексу (позиции) значение.

5. Остальная (передняя) часть массива не изменяется.

Программа на языке Паскаль:

const n = 6;

Var

arr: array [1..n] of integer;

i, j, num, id: integer;

Begin

writeln('Заполните массив: ');

for i:= 1 to n - 1 do

readln(arr[i]);

write('Ваш массив: ');

for i:= 1 to n - 1 do

write(arr[i]:5);

writeln;

write('Укажите еще один элемент: ');

readln(num);

write('Позиция в массиве: ');

readln(id);

for i:= n - 1 downto id + 1 do

arr[i+1]:= arr[i];

arr[id]:= num;

write(' Ваш массив: ');

for i:= 1 to n do

write(arr[i]:5);

writeln;

readln

end.

 

 

8) Требуется заполнить массив числами, которые вводит пользователь, и вычислить их сумму. Если пользователь вводит ноль или превышен размер массива, то запросы на ввод должны прекратиться.

Алгоритм решения задачи:

Для решения подобного рода задач иногда бывает уместно использовать цикл с постусловием (repeat).

Программа на языке Паскаль:

const n = 10;

var

arr: array[1..n] of integer;

sum: integer;

i: byte;

begin

i:= 1;

sum:= 0;

repeat

write ('Число: ');

readln(arr[i]);

sum:= sum + arr[i];

i:= i + 1

until (arr[i-1] = 0) or (i > n);

for i:= 1 to n do

write (arr[i],' ');

writeln;

writeln ('sum = ', sum);

readln

end.

 

9) Из упорядоченного массива — случайный

Первое число упорядоченного массива меняем со случайным числом следующим за ним, т.е. от 2 до n-го, второе число меняем с числом из диапазона 3, n и т.д.

Входные данные: 1 2 3 4 5 6 7 8 9 10

Выходные данные: 2 4 1 10 7 3 9 6 8 5

 

Program RandomArray;
Uses CRT;
Const n=10;
Type a_type= array [1..n] of integer;
Var a:a_type;
m,x,i:integer;
Begin
ClrScr;
randomize;
{исходный массив}
for i:=1 to n do a[i]:=i;
for i:=1 to n do write(a[i]:3);
writeln;
for i:=1 to n-1 do begin
{случайное число из диапазона i+1,n}
m:=random(n-i-1)+i+1;
{обмен i и m числа массива }
x:=a[i]; a[i]:=a[m]; a[m]:=x
end;
for i:=1 to n do write(a[i]:3);
readln
End.

 

10) Найти номер максимального элемента таблицы а[1..10]

uses crt;

var a: array [1..100] of longint;

k,i,n,max: longint;

begin

clrscr;

write('n=');readln(n);

for i:=1 to n do

begin

write('a[',i,']=');readln(a[i]);

end;

max:=a[1];k:=1;

for i:=2 to n do

if a[i]>max then

begin

max:=a[i];k:=i;

end;

write('номер: ',k);

readln;

end.

 

11) Дан линейный массив из n эл-тов. Составить программу упорядочивания элементов таблицы

uses crt;

var a: array [1..100] of longint;

j,i,n,max: longint;

begin

clrscr;

write('n=');readln(n);

for i:=1 to n do

begin

write('a[',i,']=');readln(a[i]);

end;

for i:=1 to n-1 do

for j:=i+1 to n do

if a[j]>a[i] then

begin

max:=a[j];

a[j]:=a[i];

a[i]:=max;

end;

for i:=1 to n do writeln('a[',i,']=',a[i]);

readln;

end.

 

12) Дана табл a[1..n] из целых чисел.Поставить сначала четные, а потом нечетные элм

uses crt;

var a,b: array [1..10] of longint;

m,i,j,n: longint;

begin

clrscr;

write('кол-во элм. таб. n=');readln(n);

for i:=1 to n do

begin

write('a[',i,']=');readln(a[i]);

end;

j:=0;m:=0;

for i:=1 to n do

begin

if a[i]mod 2=0

then

begin

j:=j+1;

b[j]:=a[i];

end

else

begin

m:=m+1;

b[n+1-m]:=a[i];

end;

end;

for j:=1 to n do

writeln('a[',j,']=',b[j]);

readln;

end.

 

13) Найти наибольшее кол-во одинаковых элементов.

uses crt;

var a,b: array [1..10] of longint;

k,i,j,min,max,n,m,s: longint;

begin

clrscr;

write('кол-во элм. табл. n=');readln(n);

for i:=1 to n do

begin

write('a[',i,']=');readln(a[i]);

end;

for i:=1 to n-1 do

begin

min:=a[i];k:=i;

for j:=i+1 to n do

if a[j]<min then

begin

min:=a[j];

k:=j;

end;

a[k]:=a[i];

a[i]:=min;

end;

k:=0;s:=1;i:=1;

while i<=n-1 do

if a[i]=a[i+1]

then

begin

s:=s+1;

i:=i+1;

end

else

begin

k:=k+1;

b[k]:=s;

i:=i+1;

s:=1;

end;

max:=b[1];

for i:=2 to k do

if b[i]>max then max:=b[i];

write('наибольшее кол-во одинаковых элм.: ',max);

readln;

end.

 

14)Дан одномерный массив. Упорядочить массив удалив нули со сдвигом влево ненулевых элм

uses crt;

var b:array[1..20]of integer;i,m,n:byte;

begin

clrscr;

write('введите кол-во элм массива:');readln(n);

for i:=1 to n do

begin

write('b[',i,']=');readln(b[i]);

end;

i:=1;m:=0;

while i<=n do

begin

if b[i]=0 then inc(m)

else b[i-m]:=b[i];

inc(i);

end;

if n=m

then begin

write('в упорядоченном массиве нет элм');

readln;halt;

end;

writeln('упорядоченный массив');

for i:=1 to n-m do

write(' ',b[i]);

readln;

end.

 

15) Зад. лин таб, сост из цел. чисел. Опред есть ли в этой таб хотя бы одно число кратное k

uses crt;

var a: array [1..100] of longint;

i,k,n: longint;

begin

clrscr;

write('введите кол-во элм таблицы:');readln(n);

write('введите число:');readln(k);

for i:=1 to n do

begin

write('a[',i,']=');readln(a[i]);

end;

for i:=1 to n do if k mod a[i]=0 then write(a[i],' ');

readln;

end.

 

16)Даны n чисел. Опред яв-ся ли они взаимно простыми т.е. имеют общий делитель отлич. от единицы

 

uses crt;

var a: array [1..100] of longint;

i,max,n,j: longint;

begin

clrscr;

write('введите кол-во чисел:');readln(n);

for i:=1 to n do

begin

write(i,') число:');readln(a[i]);

end;

max:=a[1];

for i:=2 to n do if max<a[i] then max:=a[i];

for i:=2 to max do

for j:=1 to n do

if a[j] mod i=0 then beginwrite('ДА');readln;halt;end

else beginwrite('НЕТ');readln;halt;end;

readln;

end.

 

17)Дан одномерный массив размерностью N из положительных и отрицательных чисел. Упорядочить так,чтобы в начале располагались все отрицательные,а затем все положительные,сохранив порядок следования и не создавая новый массив.

uses crt;

var a:array[1..100]of longint;

i,j,n,k,l:longint;

begin

clrscr;

write('Введите кол-во элм таблицы:');readln(n);

for i:=1 to n do

begin

write('a[',i,']=');readln(a[i]);

end;

j:=1;

for i:=1 to n do

if a[i]<0 then begin

l:=a[i];for k:=i downto j do

a[k]:=a[k-1];a[j]:=l;inc(j);

end;

for i:=1 to n do write(a[i],'; ');readln;

end.

 

Сформировать одномерный массив из N элементов, где элемеи ты массива- целые случайные числа в пределах от 1 до 45. Напечатать элементы массива в прямом и обратном порядке.

{ Для получения случайных чисел воспользуемся следующей функцией:
Функция Random [(x)]
Формирует случайное число от 0 до X целого или вещественного типа (перед обращением к функции ее целесообразно инициализировать, использовав процедуру Randomize).
X - параметр, указывающий диапазон значений случайного числа. Оно изменяется в пределах 0 до X. Результат в этом случае имеет тип Word (диапазон значений - 0...65535). Если параметр X не задан, результат будет типа Real в пределах 0.0 <Х< 1.0. Для получения массива целых случайных чисел из диапазона от [А,В] random(B-A+1)+A
}

program prim 1;
uses crt;
var i, n:integer;
a:array[1..10000] of integer;
begin
clrscr;
randomize;
write(' размер =');readln(n);
for i:=1 to n do
begin
{ Получаем случайные числа в пределах от 1 до 45. }
a[i]:=random(46))+1;
{ Выводим элементы массива на экран. }
write(a[i], ' ');
end;
{ Полученный массив печатаем в обратном порядке. }
for i:=n downto 1 do
write(a[i],' ');
readkey;
end.

Переставить элементы, стоящие на нечетных местах, с соответствующими элементами на четных местах.

program prim2;
uses crt;
var i, n, r: integer;
a: array[1.. 10000] of integer;
begin
clrscr;
randomize;
write ('число элементов ');
readln(n);
for i:=1 to n do
begin
{ Получаем случайные числа и выводим их на экран. }
a[i]:=random(45)-22;
write(a[i],' ');
end;
{ В полученном массиве меняем соседние элементы. }
i:=1;
{Пока I<=N-1.}
while i<=n-1 do
begin
{ Меняем значения соседних элементов. }
r:=a[i];a[i]:=a[i+1];a[i+1]:=r;
{ Увеличиваем индекс на два. }
inc(i,2);
end;
{ Распечатываем измененный массив. }
for i:=1 to n do
write(a[i],' ');
readkey;
end.

{ Процедура Inc(i,n) преобразует переменную порядкового типа i к последующему значению (n=1) или на n шагов вперед. }

Ввод с клавиатуры одномерного массива целых чисел и вывод его элементов на экран с противоположным знаком

Program Massiv2;
const N=10;
type { Раздел описания типов переменных. Эти типы определяет сам пользователь, то есть мы определяем тип одномерного массива из n целых чисел }
Mas=array [1..N] of integer; { 1..N - тип индекса; для индекса выбран интервальный тип. то есть интервал целых чисел от 1 до N. где N определено в разделе const }
var
Line:Mas; { Line - одномерный массив, его тип определен нами как Mas }
i:integer; { Переменная, хранящая индекс элемента массива, к которому идет обращение }
begin
{ Ввод массива с клавиатуры }
for i:=l to N do { Обращение к элементам массива происходит в цикле, по очереди }
begin { Начало цикла ввода элементов массива }
write('Введите элемент с индексом ',i,':');
readln(Line[i]) { Обращаемся к i-му элементу массива (Line[l],Line[2] и т. д.) }
end; { Конец цикла ввода элементов массива }
{ Вывод элементов происходит также в цикле: }
for i:=l to N do { Перебираем все N элементов массива }
write(-Line[i]:5); { 10 элементов выводятся в строку. Выводим все элементы массива с противоположным знаком }
writeln; { После вывода массива элементов - переход на новую строку }
readln
end.

Найти максимальный (минимальный) элемента массива, а также его порядковый номер.

program prim3;
uses crt;
var i,n,r,max,min,imax,imin:integer;
a:array[1..10000] of integer;
begin
clrscr;
randomize;
write('число элементов n= ');
readln(n);
for i:=1 to n do
begin
a[i]:=random(45)-22;
{ Получаем случайные числа и выводим их на экран. }
write(a[i],' ');
end;
{ За начальный максимум (минимум) берем первый элемент массива. }
min:=a[1]; max:=a[1];
for i:=1 to n do
begin
{ Если найдется элемент, меньший MIN, то MIN будет равен этому элементу. Одновременно запоминаем индекс промежуточного минимума. }
if a[i]<=min then
begin
min:=a[i]; imin:=i;
end;
{ Если найдется элемент, больший МАХ, то МАХ будет равен этому элементу. Одновременно запоминаем индекс промежуточного максимума. }
if a[i]>= max then
begin
max:=a[i]; imax:=i;
end;
end;
{ Печатаем минимальный элемент и его индекс. }
writeln(min,' номер', imin);
{ Печатаем максимальный элемент и его индекс. }
writeln(max, ' номер',imax);
readkey;
end.

Вычисление суммы положительных элементов массива

program PositivSumm;
const N=10;
type Mas=fray [1..N] of integer;
var a: Mas;
i: integer; { Счетчик цикла }
S:integer; { Копилка - переменная для суммирования положительных элементов }
begin
{ Заполним массив случайными числами в диапазоне -100..+100 }
randomize;
for i:=l to N do
begin
a[i]:=-100+random(201);
write(a[i]:5)
end;
writeln;
{ Присвоим переменным начальные значения }
S:=0; { Переменная S - аккумулятор. Она будет накапливать сумму всех положительных элементов. Нужно присвоить ей такое начальное значение, чтобы оно не повлияло на результат суммирования. Таким числом является ноль }
for i:=l to N do { Перебираем все элементы массива }
if A[i]>0 then { Проверяем каждый элемент на положительность }
S:=S+A[i]; { Если элемент положительный, добавляем значение элемента к аккумулятору }
{ Выводим результат на экран: }
writeln('Сумма положительных элементов =',S);
readln
end.

Подсчитать количество четных элементов массива, заданного датчиком случайных чисел.

program prim41;
uses crt;
var i,k,,r:integer;
a:array[1..10000] of integer;
begin
clrscr;
randomize;
write(' число элемен. п=');readln(n);
for i:=1 to n do
begin
a[i]:=random(45)-22;
write(a[i], ' ');
{ Проверяем на четность и считаем количество четных элементов. }
if a[i] mod 2=0 then inc(k, 1);
end;
write('k= ',k);
readkey
end.

Подсчитать количество отрицательных и неотрицательных элементов массива, заданного датчиком случайных чисел.

program prim2;
uses crt;
var a: array [1..10000] of integer;
i,k,n,l:integer;
begin
randomize;
clrscr;
write('чucлo элементов n=');readln(n);
for i:=1 to n do
begin
a[i]:=random(45)-22;
write(a[i],' ');
{ Сравниваем с нулем и считаем неотрицательные и отрицательные элементы. }
if a[i]>=0 then k:=k+1 else
l:=l+1;
end;
writeln;
writeln(' нeompuц. = ', k, ' отриц.= ', l);
readln;
end.

Произвести удаление элемента из одномерного массива, заданного датчиком случайных чисел.

program рrim3;
uses crt;
var a.array [1..1000] of integer;
i,k,n:integer;
begin
randomize;
clrscr;
write(' число элементов n=');readln(n);
for i:=1 to n do
begin
a[i]:=random(45)-22;
write(a[i], ' ');
end;
{ Вводим номер удаляемого элемента. }
write(' номер удал. элем. k=<п ');readln(k);
for i:=1 to n-1 do
begin
{ Смещаем элементы массива к началу, начиная с К-го. }
if i>=k then a[i]:=a[i+1];
end;
{Обнуляем последний элемент.}
a[n]:=0;
{ Выводим на экран измененный массив. }
for i:=1 to n - 1 do
begin
write(a[i],' ');
end;
readln;
end.

Произвести вставку элемента в одномерный массив, заданный датчиком случайных чисел.

program prim22;
uses crt;
var a: array [1..1000] of integer;
r,i,k,n:integer;
begin
randomize;
clrscr;
{ Создаем массив и выводим на экран. }
write(' число элементов n=');readln(n);
for i:=1 to n do
begin
a[i]:=random(45)-22;
write(a[i], ' ');
end;
{ Вводим индекс и значение вставляемого элемента. }
write(' индекс < =N ');readln(k)
write('значение R =');readln(r);
{ Смещаем элементы к концу массива, начиная с К+1. }
for i:=n+1 downto 1 do
begin
if i>k then a[i]:=a[i-1];
end;
{ На К-ое место ставим введенный элемент. }
a[k]:=r;
{ Выводим на экран измененный массив }
for i:=1 to n+1 do
begin
write(a[i],'');
end;
readln;
end.

Задание:

1. Дан массив чисел а1,...,аn. Выяснить, имеются ли в данном массиве 2 идущих подряд положительных элемента. Подсчитать количество таких пар.

2. Даны действительные а1,...,аn. Требуется найти максимальное значение из чисел а1,...,an и отклонение от максимального для каждого из чисел.

3. Даны действительные а1,...,аn. Вычислить сумму положительных и произведение четных членов данного массива,если таких членов нет, то выдать сообщение.

4.Если в данном массиве действительных чисел а1,...,аn есть хотя бы один член, меньший чем -2,то все отрицательные члены заменить их квадратами.

5.Сформировать в программе массив из целых чисел от 2 до N. Подсчитать сумму квадpатов четных и сумму квадратов нечетных чисел.

6.Массив а1,...,a24 содержит данные измерения температуры воздуха в течение дня. Найти максимальную, минимальную и среднюю температуру воздуха.

7.Дано натуральное число N и массив целых чисел а1,..an Выяснить имеется ли в массиве а1,..,an хотя бы одно нечетное отрицательное число и определить его местонахождение в массиве.

8.Дан массив целых чисел a1,...,an. Найти количество и сумму тех членов массива а1,..,аn,которые делятся на 5 и не делятся на 7.

9.Дан массив действительных чисел a1,...,an. Получить количество отрицательных членов массива а1,..,an и пpоизведение элементов, принадлежащих отрезку [с,в].

10. Дан массив символов s1,..sn.Подсчитать сколько раз встречается в массиве символ К.

11.Дан массив символов S1,...,Sn. Распечатать все буквы В, непосредственно перед которыми находится буква С.

12. Дан массив символов S1,...,Sn. Напечатать true, если в заданном массиве буква а встречается чаще, чем буква b, и напечатать false в противоположном случае.

13. Дан массив целых чисел a1,...,an. Найти максимальный элемент массива и поменять его местами с первым элементом.

14.Дан массив целых чисел a1,..,an. Найти минимальный элемент массива и поменять его местами с последним элементом.

15.Дан массив целых чисел a1,...,an. Найти минимальный и максимальный элементы массива и поменять их местами.


Двумерный массив

1) Поменять местами столбцы двумерного массива, содержащие минимальный и максимальный элементы.

Например:

 

 

Решение:

program min_max;

uses crt;

var

a: array[1..20, 1..20] of real;

i,j,m,n,st_min,st_max: integer;

min,max,otvet: real;

begin

clrscr;

writeln(“укажите количество строк матрицы”);

readln(m);

writeln(“укажите количество столбцов матрицы”);

readln(n);

writeln(“укажите элементы матрицы”);

for i:=1 to n do

for j:=1 to m do

begin

writeln(‘укажите элемент, стоящий на ’,i, ‘-ой строке и ’,j, ‘-м столбце матрицы’);

readln(a[i,j]);

end;

min:= a[1,1];

st_min:=1;

max:= a[1,1];

st_max:=1;

for i:=1 to m do

for j:=1 to n do

begin

if min>a[i,j] then

begin

min:=a[i,j];

st_min:=j;

end;

if max< a[i,j] then

begin

max:= a[i,j];

st_max:=j;

end;

end;

for i:=1 to m



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: