СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Сборник задач с решениями на языке программирования Паскаль

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Сборник задач с решениями на языке программирования Паскаль»






Сборник

задач с решениями

на языке

программирования

Паскаль




















Задача 1


Компьютер в первую секунду печатает на экране 1, во вторую – число 12, в третью – число 23. То есть, в каждую следующую секунду – на 11 больше, чем в предыдущую. В какую секунду впервые появится число, делящееся на 2009?


Программа


program z1;

var

k,x:integer;

Begin

k:=1;

x:=1;

while x mod 20090 do

begin

k:=k+1;

x:=x+11;

end;

writeln ('Через ', k, ' секунд');

end.



Задача 2

Найдите количество четных цифр в десятичной записи числа n.

Пример


Входные данные

Результат

1486

371

3

0


Программа


program z2;

var

x, y, k:integer;

Begin

readln (x);

k:=0;

while x0 do

begin

y:=x mod 10;

if y mod 2 =0 then k:=k+1;

x:=x div 10;

end;

writeln ('k=',k);

end.


Задача 3


Выясните, лежат ли на одной прямой точки А(x1, y1), B(x2, y2), C(x3, y3)


Пример


Входные данные

Результат

x1=1 y1=1

x2=6 y2=3

x3=11 y3=5

Точки лежат на одной прямой


Программа


program z3;

var

x1, x2, x3, y1, y2, y3, z, n:real;

Begin

write (‘Введите координаты точки А ');

readln (x1,y1);

write (‘Введите координаты точки В ');

readln (x2,y2);

write (‘Введите координаты точки C ');

readln (x3,y3);

z:=(x3-x1)/(y3-y1);

n:=(x3-x2)/(y3-y2);

if (z=n) and (z=(x2-x1)/(y2-y1)) then

writeln ('Точки лежат на одной прямой’)

else

writeln ('Точки не лежат на одной прямой’);

end.



Задача 4


Сообщество роботов живет по следующим законам: один раз в год они объединяются в полностью укомплектованные группы по 3 или 5 роботов (причем число групп из 3 роботов - максимально возможное). За год группа из 3 роботов собирает 5, а группа из 5 - 9 новых собратьев. Каждый робот живет 3 года после сборки. Известно начальное количество роботов (К7), все они только что собраны. Определить, сколько роботов будет через N лет.


Пример


Входные данные

Результат

8 3

10 10

152

143702




Программа


program z4;

var k, i, n, p:integer;

s, x, y:longint;

r:array [1..3] of longint;

Begin

write('количество роботов k='); readln(k);

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

r[1]:=k; r[2]:=0; r[3]:=0; s:=k;

for i:=1 to n do

begin

x:=s div 3;

p:=s mod 3;

if p=0 then y:=0

else if p=1 then begin x:=x-3; y:=2 end

else begin x:=x-1; y:=1 end;

r[3]:=r[2]; r[2]:=r[1]; r[1]:=5*x+9*y;

s:=r[1]+r[2]+r[3];

end;

writeln (‘Количество роботов - ’,s);

end.




Задача 5


Суточный рацион коровы составляет a кг сена, b кг силоса и c кг комбикорма. В хозяйстве, содержащем стадо из k голов, осталось x центнеров сена, y тонн силоса и z мешков комбикорма по 50 кг. Сколько еще дней хозяйство сможет кормить коров по полному рациону.


Программа


program z5;

var

a,b,c,x,y,z,kol,r:real;

Begin

readln (a,b,c);

readln (x,y,z);

readln (r);

x:=int(x*100/a);

y:=int(y*1000/b);

z:=int(z*50/c);

kol:=0;

if (x=r) and (y=r) and (z=r) then

begin

if (x

if (y

if (z

end;

writeln (kol);

end.

Задача 6


Предприниматель, начав дело, взял кредит размером k рублей под p процентов годовых и вложил его в свое дело. По прогнозам, его дело должно давать прибыль r рублей в год. Сможет ли он накопить сумму, достаточную для погашения кредита, и если да, то через сколько лет?


Программа


program z6;

var

k,p,r,s, h:real;

kol: integer;

Begin

readln (k,p,r);

kol:=0;

while (k0) and (kol

begin

kol:=kol+1;

k:=k+k*(p/100);

k:=k-r;

end;

if kol=50 then writeln ('no') else writeln (kol);

end.



Задача 7


Дано два целых положительных числа: a и b. Требуется написать программу, которая находит цифру, на которую оканчивается число a^b.


Входные данные

Результат

a=2

b=4

6



Программа


program z7;

var

a,b,d:integer;

c:byte;

Begin

writeln ('Введите a'); readln (a);

writeln ('Введите b'); readln (b);

d:=a;

if b=1 then writeln (a)

else

begin

for c:=2 to b do

d:=d*a;

d:=d mod 10;

end;

writeln (d);

end.

Задача 8


Из одного порта в другой необходимо перевезти 15 различных грузов. Грузоподъемность судна, на котором будет проходить перевозка, 50 тонн. Грузы пронумерованы, и информация о массах грузов хранится в массиве М(15). Определить, сколько рейсов необходимо сделать судну, если грузы неделимы и могут перевозиться только подряд в порядке их нумерации. (Предполагается, что масса отдельного груза не превышает 50 тонн).


Программа


program z8;

type

mas=array[1..15] of integer;

var

m:mas;

k,i,s:integer;

Begin

for i:=1 to 15 do

begin

writeln ('Введите m','[',i,']');

readln (m[i]);

end;

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

repeat

if s+m[i]

begin

s:=s+m[i];

i:=i+1;

end

else

begin

k:=k+1;

s:=0;

end;

until i15;

writeln ('Потребовалось, k,'рейсов');



Задача 9

Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на p%. Через сколько лет он накопит сумму s, достаточную для покупки собственного магазина?

Пример


Входные данные

Результат

200000

5

3000000

4

Программа


program z9;

var

s,k,p:real;

n:integer;

Begin

writeln ('Введите стартовый капитал');

readln(k);

writeln ('Введите % увеличения капитала');

readln(p);

writeln ('Введите сумму, необходимую для покупки магазина');

readln(s);

while k

begin

k:=k+k*(p/100);

n:=n+1;

end;

writeln ('Количество лет -',int(n/12));

end.



Задача 10

Число Цукермана – натуральное число, которое делится на произведение своих цифр, например: 175 делится на 1·7·5=35. Составить программу, которая выводит на экран все трехзначные числа Цукермана.

Программа


program z10;

var i,a,b,c: integer;

Begin

for i := 111 to 999 do

begin

a := i div 100;

b := (i div 10) mod 10;

c := i mod 10;

if (b 0) and (c 0) and (i mod (a * b * c) = 0) then writeln (i);

end;

end.










Задача 11


На конференцию приехало N человек. Для их перевоза выделили автомобили вместимостью К и М человек (без водителя). К гостинице автомобили подаются в таком порядке: сначала вместимостью К человек, потом – М человек и так далее. В автомобиле можно перевозить не более максимально допустимого количества пассажиров. Определить, сколько необходимо автомобилей для перевозки всех делегатов конференции.


Пример


Входные данные

Результат

20

3

4

6


Программа


program z11;

var

N,M,K,x:integer;

Begin

writeln ('Введите количество участников');

readln(N);

writeln ('Введите вместимость первого автомобиля');

readln(K);

writeln ('Введите вместимость второго автомобиля');

readln(M);

x:=0;

while N0 do

begin

x:=x+1;

if x mod 20 then N:=N-K else N:=N-M;

end;

writeln (x);

end.














Задача 12


Имеется четыре коробки спичек и в каждой из них по 15 спичек. Номер коробки, из которой берется очередная спичка, выбирается случайно. Сколько спичек будет сожжено, прежде чем одна из коробок опустеет? Составить программу.


Программа


program z12;

var

A: array [1..4] of integer;

i, m ,n:integer;

Begin

for i:=1 to 4 do

A[i]:=15;

repeat

n:=1+random(4);

A[n]:=A[n]-1;

m:=m+1;

until A[n]=0;

writeln ('В коробке', n, 'закончились спички');

writeln ('Израсходовано спичек', m);

end.


Задача 13


Сформировать квадратную матрицу следующего вида.


1

2

3

4

5

2

3

4

5

1

3

4

5

1

2

4

5

1

2

3

5

1

2

3

4


Программа


program z13;

var

A: array [1..5, 1..5] of byte;

i, j:integer;

begin

for i:=1 to 5 do

for j:=1 to 5 do

A[i, j]:=1+(i+j-2) mod 5;

for i:=1 to 5 do

begin

for j:=1 to 5 do

write (a[i, j]:2);

writeln;

end;

end.

Задача 14


Дано число типа byte. Проверить, является ли палиндромом его двоичное представление с учетом того, что сохранены старшие нули. Пример таких чисел: 102 (т. к. 102 = 0110 01102, а это палиндром), 129 (129 = 1000 00012) и т. д.


Пример


Входные данные

Результат

n=129

n=128

true

false


Программа


program z14;

var

n, a, b, c, d: byte;

Begin

readln (n);

a := n mod 2;

n := n div 2;

b := n mod 2;

n := n div 2;

c := n mod 2;

n := n div 2;

d := n mod 2;

n := n div 2;

a := 8 * a + 4 * b + 2 * c + d;

writeln (n = a);

end.



Задача 15


Даны два натуральных числа. Найти их наименьшее общее кратное.

Примечание: наименьшим общим кратным двух чисел m и n называется наименьшее натуральное число, которое делится на m и n. Обозначение: НОК(m, n)


Пример


Входные данные

Результат

m=5

n=11

55










Программа


program z15;

var

m, n, prod: word;

Begin

readln(m, n);

prod := m * n;

while m n do begin

if m n then begin

m := m – n

end

else begin

n := n – m

end

end;

writeln(prod div m)

end.



Задача 16


Дана последовательность символов длины n (n = 1). Проверить баланс круглых скобок в этом выражении. Например, при вводе выражения (())() программа должна сообщить о правильности расстановки скобок, а при вводе выражения ((()) – о неправильности.

Примечание: сбалансированной скобочной записью называется символьное выражение, в котором каждой открывающей скобке соответствует закрывающая скобка правее и наоборот, каждой закрывающей скобке соответствует открывающая скобка левее.


Пример


Входные данные

Результат

n=7

(((()))

false

Программа


program Z16;

var

count: integer;

i, n: byte;

c: char;

Begin

readln(n);

count := 0;

for i := 1 to n do begin

read(c);

if c = '(' then inc(count);

if c = ')' then dec(count);

if count = -1 then break

end;

writeln(count = 0)

end.


Задача 17


Сколько существует упорядоченных пар натуральных чисел а и b, для которых известны их наибольший общий делитель d и их наименьшее общее кратное m?


Пример


Входные данные

Результат

d=2

m=30

(6, 10)

(2, 30)


Программа


program Z17;

var

a, b, i, j, d, m:integer;

function nod(a, b:integer):integer;

begin

if a=b then nod:=a

else

if ab then nod:=nod(a-b, b) else nod:=nod(a, b-a)

end;

Begin

writeln (‘Введите НОД двух чисел d’);

readln (d);

writeln (‘Введите НОK двух чисел m’);

readln (d);

for i:=1 to 100 do

begin

for j:=1 to 100 do

begin

a:=i;

b:=j;

if ((nod(a, b)=d) and ((a*b div nod(a, b))=m)) then writeln (i, j);

end;

end;

readln

end.














Задача 18


Правительство гарантирует, что инфляция в новом году составит р% в месяц. Какого роста цен за год можно ожидать? Составить программу решения задачи.


Пример


Входные данные

Результат

p=1

p=10

s=12.68

s=213.84



Программа


Пояснения:

Сложные проценты вычисляются по формуле .


program Z18;

var

a, p, s:real;

Begin

writeln (‘Введите процент месячной инфляции’);

readln (p);

a:=exp(ln(1+p/100)*12);

s:=(a-1)*100;

writeln (s:10:2);

readln

end.



Задача 19


Факультету выделен стипендиальный фонд в размере f рублей в месяц. Результаты сессии таковы: «отличников», «хорошистов», «троечников». Повышенная стипендия (для отличников) составляет рублей, обычная - рублей; задолжники стипендии лишаются. Составить программу, определяющую сколько студентов каждой категории могут получать стипендию и каков будет остаток фонда на материальную помощь малоимущим студентам?


Программа


program Z19;

var

n1,n2,n3,k1,k2,k3,s,s1,s2:integer;

f:longint;

Begin

writeln (‘Введите размер фонда’);

readln (f);

writeln (‘Введите количество отличников, хорошистов и троечников’);

readln (n1,n2,n3);

writeln (‘Введите размер стипендий’);

readln (s1,s2);

if fs1*n1 then k1:=n1 else k1:=f div s1;

f:=f-s1*k1;

if fs2*n2 then k2:=n2 else k2:=f div s2;

f:=f-s2*k2;

if fs2*n3 then k3:=n3 else k3:=f div s2;

f:=f-s2*k3;

writeln ('Количество отличников, получивших стипендию=',k1);

if k20 then writeln ('Количество хорошистов, получивших стипендию= ',k2);

if k30 then writeln ('Количество троечников, получивших стипендию =',k3);

writeln (‘Фонд материальной помощи=’, f);

readln

end.


Задача 20


N коробок стоят по кругу. В i-ой коробке j змей. Каждую минуту змеи переползают в соседнюю коробку (из i-ой в i+1-ую), а из N-ой – в первую. Составить программу, определяющую количество змей в каждой коробке через М минут.


Пример


Входные данные

Результат

N=6

M=4

3 4 5 6 1 2


Программа


program Z20;

var

n, m, i, j:integer;

Begin

writeln (‘Введите количество коробок n’);

readln (n);

writeln (‘Введите количество минут m’);

readln (m);

m:=m mod n;

if m=0 then begin j:=0; m:=n end else j:=n-m;

for i:=1 to n do

begin

j:=j+1;

write (j,' ');

if i=m then j:=0;

end;

writeln (n);

readln

end.







Задача 21


У Вас имеется в наличии 2000 рублей. Вам необходимо купить в общей сложности 200 предметов по следующим ценам: фломастеры - 20 рублей за упаковку, тетради общие - 10 рублей за штуку, стержни - 1,5 рубля за штуку. Вы должны потратить все деньги.


Программа


program z21;

var

x,y,z,kol:integer;

sum:real;

Begin

for x:=1 to 200 do

begin

for y:=1 to 200 do

begin

for z:=1 to 200 do

begin

sum:=20*x+10*y+1.5*z;

kol:=x+y+z;

if (sum=2000) and (kol=200) then writeln('фломастеры -',x,' тетради -', y, ' стержни -', z);

end;

end;

end;

end.



Задача 22


Имеется N точек, расположенных в произвольном порядке на плоскости. Найти две точки, расстояние между которыми наименьшее.


Пример


Входные данные

Результат

n=5

3 4

7 2

9 9

-7 -3

-1 -1

Номера точек

1 2



Программа


program z22;

const n=5;

var

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

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

i,j,num1,num2:integer;

m,q:real;

begin

FOR i:= 1 TO n do

begin

readln(a[i], b[i]);

end;

num1:=1;

num2:=2;

m:=SQRT(SQR(a[1] - a[2])+ SQR(b[1] - b[2]));

FOR i:= 1 TO n - 1 do

begin

FOR j:= i + 1 TO n do

begin

q:=SQRT(SQR(a[1] - a[2])+ SQR(b[1] - b[2]));

IF q

begin

m:=q;

num1:=i;

num2:=j;

end;

end;

end;

writeln(‘Номера точек’);

writeln(num1,' ',num2);

end.



Задача 23



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


Пример


Входные данные

Результат

N=10

N=100

s=11

s=192


Программа


program z23;

var

n, i, s:integer;

k:string;

Begin

readln (n);

s:=0;

for i:=1 to n do

begin

str(i,k);

s:=s+length(k);

end;

writeln ('Количество десятичных цифр=' ,s);

end.



Задача 24


Король Флатландии решил вырубить некоторые деревья, растущие перед его дворцом. Деревья перед дворцом короля посажены в ряд, всего там растет N деревьев, расстояния между соседними деревьями одинаковы.

После вырубки перед дворцом должно остаться M деревьев, и расстояния между соседними деревьями должны быть одинаковыми. Помогите королю выяснить, сколько существует способов вырубки деревьев.

Требуется написать программу, которая по заданным числам N и M определит, сколько существует способов вырубки некоторых из N деревьев так, чтобы после вырубки осталось M деревьев и соседние деревья находились на равном расстоянии друг от друга.



Пример


Входные данные

Результат

N=5

M=3

4


Программа


program z24;

var

n, m ,k: longint;

i, d, s: longint;

Begin

readln(n);

readln(m);

s := 0;

k:=(n-1) div (m-1);

d:=m-1;

s:=(2+(k-1)*d)*k div 2;

writeln (‘Количество способов вырубки деревьев=’, s);

end.














Задача 25


Из элементов массива А(2n) получить массивы В(n) и C(n) следующим образом. Выбрать в массиве А два наиболее близких по значению элемента; меньший из них поместить в массив В, а больший – в массив С. Продолжить выбор из оставшихся элементов до полного заполнения массивов В и С.


Пример


Входные данные

Результат

Массив А

8 0 10 4 1 99 3 15 2 11


Массив В

  1. 0 2 4 10 15

Массив С

1 3 8 11 99

Программа


program z25;

var

i, j, x,k,n:integer;

min,d:real;

a:array[1..10] of real;

b:array[1..5] of real;

c:array[1..5] of real;

Begin

x:=0;

k:=0;

for i:=1 to 10 do

read(a[i]);

writeln('Массив А');

for i:=1 to 10 do

write(a[i], ' ');

writeln;

for i:=1 to 10 do

begin

min:=a[i];

for j:=i+1 to 10 do

begin

if a[j]

begin

min:=a[j];

n:=j;

end;

end;

if i mod 20 then

begin

x:=x+1;

b[x]:=min;

end

else

begin

k:=k+1;

c[k]:=min;

end;

d:=a[n];

a[n]:=a[i];

a[i]:=d;

end;

writeln('Массив B');

for i:=1 to 5 do

begin

write(b[i], ' ');

end;

writeln;

writeln('Массив C');

for i:=1 to 5 do

begin

write(c[i], ' ');

end;

end.



Задача 26


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


Пример


Входные данные

Результат

7

5

5 * 5 - 1

2 * 2 - 2

1 * 1 - 2

5



Программа


program z26;

var

a,b,k,c:real;

begin

readln(a);

readln(b);

k:=0;

while (a0)and (b0) do

begin

IF a

begin

c:=int(b/a);

writeln(a, ' * ', a, ' - ', c);

b:=b-c*a

end

ELSE

begin

c:=INT(a/b);

writeln(b, ' * ', b, ' - ', c);

a:=a-c*b;

end;

k:=k+c;

end;

writeln('Количество квадратов-',k);

end.



Задача 27



Папа Карло, играя на шарманке, ежедневно зарабатывает у туристов 5 золотых (монет). Весь заработок уходит на обед папы Карло и его друзей в харчевне «Три пескаря», где плату принимают только деревянными (монетами). В меняльных лавках папу Карло не обслуживают. Банкир Карабас-Барабас для друзей папы Карло установил индивидуальные правила обмена золотых на деревянные в разных лавках (смотри таблицу). Каждый из друзей может обменять только один золотой и в каждой лавке могут обслужить только одного из друзей.


Таблица обмена одного золотого на деревянные


лавки


Буратино

Мальвина

Пьеро

Арлекино

Артемон

1

12

13

10

7

8

2

10

11

9

7

9

3

11

10

9

8

4

4

10

11

8

10

5

5

7

12

10

9

7


Составить программу нахождения оптимального плана обмена 5 золотых на деревянные в виде: Буратино, N лавки; Мальвина, N лавки; Пьеро, N лавки; Арлекино, N лавки; Артемон, N лавки; количество полученных деревянных.

В программе рассматривается =120 возможных вариантов обмена золотых монет на деревянные и выбирается оптимальный вариант обмена.










Программа


program z27;

var

Q:array[1..5,1..5]of integer;

F:array[1..5] of integer;

P:array[1..5] of string;

a,b,c,d,e,N,i,S:integer;

Begin

N:=0;

Q[1, 1]:=12; Q[1, 2]:=13; Q[1, 3]:=10; Q[1, 4]:=7; Q[1, 5]:=8;

Q[2, 1]:=10; Q[2, 2]:=11; Q[2, 3]:=9; Q[2, 4]:=7; Q[2, 5]:=9;

Q[3, 1]:=11; Q[3, 2]:=10; Q[3, 3]:=9; Q[3, 4]:=8; Q[3, 5]:=4;

Q[4, 1]:=10; Q[4, 2]:=11; Q[4, 3]:=8; Q[4, 4]:=10; Q[4, 5]:=5;

Q[5, 1]:=7; Q[5, 2]:=12; Q[5, 3]:=10; Q[5, 4]:=9; Q[5, 5]:=7;

P[1]:='Буратино'; P[2]:='Мальвина'; P[3]:='Пьеро';

P[4]:='Арлекино'; P[5]:='Артемон';

FOR a:=1 TO 5 do

FOR b:=1 TO 5 do

FOR c:=1 TO 5 do

FOR d:=1 TO 5 do

FOR e:=1 TO 5 do

if (ab) AND (ac) AND (ad) AND (ae) AND (bc) AND (bd)AND (be) AND (cd) AND (ce) AND (de) then

begin

S:=Q[a, 1]+Q[b, 2]+Q[c, 3]+Q[d, 4]+Q[e, 5];

IF SN THEN

begin

F[1]:=A; F[2]:=B; F[3]:=C; F[4]:=D; F[5]:=E; N:=S;

end;

end;

FOR i:=1 TO 5 do

writeln (P[i], ' номер лавки - ', F[i], ' количество денег -', Q[F[i], i]);

writeln (N);

end.



Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!