Содержание
Задачи в сборнике классифицированы по основным разделам: линейные алгоритмы, разветвляющиеся алгоритмы, циклические алгоритмы, обработка массивов, обработка строк и создание графических изображений. После каждого раздела предлагаются задачи для самостоятельного решения. Внутри каждого раздела задачи по мере возможности расположены по возрастанию степени трудности.
writeln (‘ Введите a’); readln (a);
writeln (‘ Введите b’); readln (b);
if b=1 then writeln (a)
Из одного порта в другой необходимо перевезти 15 различных грузов. Грузоподъемность судна, на котором будет проходить перевозка, 50 тонн. Грузы пронумерованы, и информация о массах грузов хранится в массиве М(15). Определить, сколько рейсов необходимо сделать судну, если грузы неделимы и могут перевозиться только подряд в порядке их нумерации. (Предполагается, что масса отдельного груза не превышает 50 тонн).
mas=array[1..15] of integer;
for i:=1 to 15 do
writeln (‘ Введите m’,'[‘,i,’]’);
writeln (‘ Потребовалось , k,’ рейсов ‘);
Коммерсант, имея стартовый капитал k рублей, занялся торговлей, которая ежемесячно увеличивает капитал на p % . Через сколько лет он накопит сумму s , достаточную для покупки собственного магазина?
writeln (‘Введите стартовый капитал’);
writeln (‘Введите % увеличения капитала’);
writeln (‘Введите сумму, необходимую для покупки магазина’);
writeln (‘Количество лет -‘, int ( n /12));
Число Цукермана – натуральное число, которое делится на произведение своих цифр, например: 175 делится на 1·7·5=35. Составить программу, которая выводит на экран все трехзначные числа Цукермана.
var i,a,b,c: integer;
for i := 111 to 999 do
b := (i div 10) mod 10;
if (b <> 0) and (c <> 0) and (i mod (a * b * c) = 0) then writeln (i);
На конференцию приехало N человек. Для их перевоза выделили автомобили вместимостью К и М человек (без водителя). К гостинице автомобили подаются в таком порядке: сначала вместимостью К человек, потом – М человек и так далее. В автомобиле можно перевозить не более максимально допустимого количества пассажиров. Определить, сколько необходимо автомобилей для перевозки всех делегатов конференции.
writeln (‘Введите количество участников’);
writeln (‘Введите вместимость первого автомобиля’);
writeln (‘Введите вместимость второго автомобиля’);
if x mod 2<>0 then N:=N-K else N:=N-M;
Имеется четыре коробки спичек и в каждой из них по 15 спичек. Номер коробки, из которой берется очередная спичка, выбирается случайно. Сколько спичек будет сожжено, прежде чем одна из коробок опустеет? Составить программу .
A: array [1..4] of integer;
writeln (‘В коробке’, n , ‘закончились спички’);
writeln (‘Израсходовано спичек’, m );
Сформировать квадратную матрицу следующего вида.
A: array [1..5, 1..5] of byte;
Дано число типа byte . Проверить, является ли палиндромом его двоичное представление с учетом того, что сохранены старшие нули. Пример таких чисел: 102 (т. к. 102 = 0110 0110 2 , а это палиндром), 129 (129 = 1000 0001 2 ) и т. д.
a := 8 * a + 4 * b + 2 * c + d;
Даны два натуральных числа. Найти их наименьшее общее кратное.
Примечание: наименьшим общим кратным двух чисел m и n называется наименьшее натуральное число, которое делится на m и n . Обозначение: НОК( m , n )
while m <> n do begin
if m > n then begin
writeln(prod div m)
Дана последовательность символов длины n ( n >= 1 ). Проверить баланс круглых скобок в этом выражении. Например, при вводе выражения (())() программа должна сообщить о правильности расстановки скобок, а при вводе выражения ((()) – о неправильности.
Примечание: сбалансированной скобочной записью называется символьное выражение, в котором каждой открывающей скобке соответствует закрывающая скобка правее и наоборот, каждой закрывающей скобке соответствует открывающая скобка левее.
for i := 1 to n do begin
if c = ‘(‘ then inc(count);
if c = ‘)’ then dec(count);
if count = -1 then break
writeln ( count = 0)
Сколько существует упорядоченных пар натуральных чисел а и b , для которых известны их наибольший общий делитель d и их наименьшее общее кратное m ?
a, b, i, j, d, m:integer;
function nod(a, b:integer):integer;
if a=b then nod:=a
if a>b then nod:=nod(a-b, b) else nod:=nod(a, b-a)
writeln (‘ Введите НОД двух чисел d’);
writeln (‘ Введите НО K двух чисел m’);
for i:=1 to 100 do
for j:=1 to 100 do
if ((nod(a, b)=d) and ((a*b div nod(a, b))=m)) then writeln (i, j);
Правительство гарантирует, что инфляция в новом году составит р % в месяц. Какого роста цен за год можно ожидать? Составить программу решения задачи.
Сложные проценты вычисляются по формуле .
writeln (‘Введите процент месячной инфляции’);
Факультету выделен стипендиальный фонд в размере f рублей в месяц. Результаты сессии таковы: «отличников», «хорошистов», «троечников». Повышенная стипендия (для отличников) составляет рублей, обычная — рублей; задолжники стипендии лишаются. Составить программу, определяющую сколько студентов каждой категории могут получать стипендию и каков будет остаток фонда на материальную помощь малоимущим студентам?
writeln (‘ Введите размер фонда ’);
writeln (‘Введите количество отличников, хорошистов и троечников’);
readln ( n 1, n 2, n 3);
writeln (‘Введите размер стипендий’);
if f>s1*n1 then k1:=n1 else k1:=f div s1;
if f>s2*n2 then k2:=n2 else k2:=f div s2;
if f>s2*n3 then k3:=n3 else k3:=f div s2;
writeln (‘Количество отличников, получивших стипендию=’, k 1);
if k 2>0 then writeln (‘Количество хорошистов, получивших стипендию= ‘, k 2);
if k 3>0 then writeln (‘Количество троечников, получивших стипендию =’, k 3);
writeln (‘Фонд материальной помощи=’, f );
N коробок стоят по кругу. В i -ой коробке j змей. Каждую минуту змеи переползают в соседнюю коробку (из i -ой в i +1 -ую), а из N -ой – в первую. Составить программу, определяющую количество змей в каждой коробке через М минут.
Primary tabs
Forums:
Задачи к уроку #1
- Напишите программу, выводит на экран три строки "Мир", "Труд" и "Май" (кавычки не нужны). Причём сделайте чтобы выводилось сначала так:
Подсказка: помните, что печатая строковые литералы, вы можете печатать не только любые буквы, но и любое количество пробелов, не только между словами, но и в конце или в начале фраз.
Задачи к уроку #2 (типы данных)
- Напишите программу, в которой используются две переменные логического типа (boolean), присвойте им значения и выведете для каждой переменной на экран строку "истина", если переменная имеет значение true и "ложь", если переменная имеет значение false.
- Переделайте предыдущую задачу для 3-х переменных, литералы "истина" и "ложь" запишите в переменные, и используйте эти две строковые переменные для уведомления пользователя об истинности/ложности каждой из трёх логических переменных (предварительно присвойте им логические значения).
- Напишите программу, где двум строковым переменным присваиваются значения, третей же строковой переменных присвойте объединение (конкатенацию) двух предыдущих строк. Затем напечатайте значение третьей строковой переменной.
- Напишите программу, сравнивающую вещественное число с целым (сами присвойте им значения), записывающую логический результат сравнения в логическую (boolean) переменную и использующую эту переменную для вывода с помощью условного оператора if фраз "выражения истинно", "выражение ложно". Обе фразы выводите на экран с помощью переменных строкового типа (string).
Задачи к уроку #3 (ввод/вывод данных)
- Напишите программу которая просит пользователя ввести два символа (сначала один, потом второй). Выведите полученные значения на экран с комментариями
- Напишите программу которая просит пользователя ввести две строки, затем проводит их конкатенацию и выводит на экран результат конкатенации с комментарием.
- Напишите программу, где пользователю предлагается ввести строку, считайте первые три символа в переменные символьного типа (char), первый и третий символы выведите на экран.
- Пусть пользователь вводит строку:
(или любую другую, но достаточно длинную)
-
считайте из неё 5-й символ, используя возможность read() записывать значений во многие переменные сразу (если эти значения есть в потоке ввода), например:
Выведите полученный символ на экран.
Задачи к уроку #4 (условный оператор if)
- Создайте программу с двумя переменными целого типа, присвойте им значения, если первая переменная больше второй, то увеличьте её значение на 3, иначе увеличьте значение второй переменной на 8. В конце программы выведите значения обоих чисел на экран.
Подсказка: напоминаем, что в Pascal возможны выражения вида:
В конце программы выведите значения обоих чисел на экран.
Подсказка: для проверки четности можно использовать операцию получения остатка mod.
Задачи к уроку #5 (циклы)
- Выведете на экран все числа от 1 до 100 с помощью цикла (можно все три варианта в одной программе):
- for
- while
- repeat
- Модифицируйте предыдущую задачу так, чтобы на экран выводились только нечетные числа.
- Пользователь вводит целое положительное число, если оно не соответствует критериям (то есть не является целым и положительным), выведете сообщение об ошибке, в противном случае выведете на экран все числа от 1 до введённого пользователем.
- Модифицируйте предыдущую задачу так, чтобы в случае, если число удовлетворяет требованиям (целое, положительное), то на экран выводились четные числа.
- Выведете на экран числа от 1 до 5 два раза с помощью вложенных циклов. Так чтобы в консоли было:
- M раз выведете на экран числа от 1 до N с помощью вложенных циклов. Так чтобы в консоли было:
$
left.
egin
1 & . & N \
1 & . & N \
end
ight> ext
$ - Модифицируйте предыдущую задачу так, чтобы в каждой чётной (той, у которой номер чётный) строке выводилось N символов, а в каждой нечетной N/2 символов (сделайте проверку того, что $N/2$ больше нуля)
- Пользователь вводит числа до тех пор пока им не будет передан ноль. В ответ на каждое число программа должна сообщать чётное оно или нет.
- Пользователь вводит четное целое число (если нечетное сообщите об ошибке). Делите это число в цикле на $2$ до тех пор пока оно делится, выводя каждый промежуточный результат, например для $12$ в консоли получим:
А для 8:
Пользователь два целых числа $M$ и $N$ целое число, если $M$ четное, делайте то же, что и в предыдущей задачи, а если нечётное, то умножайте $M$ в цикле на $3$ до тех пор пока результат не станет больше $N$ (и выводите ), например для:
— то есть всё начинается с восьмерки, затем число увеличивается на 2, затем выводит тройка и ещё пара увеличенных на 2 чисел и т.д.
Модифицируйте решение предыдущей задачи. так чтобы пользователь вводил второе число $M$, которое отвечало бы за длину возрастающего фрагмента, например для $M=4$:
$ underbrace<8 ;10 ;12 ;14>_< ext<четыре числа>> ;3 underbrace<;16 ;18 ;20 ;22>_< ext<четыре числа>> ;3 ; . ;3 ;. ; ext <и т.д.>$
Заметьте. что в предыдущей задаче $M$ было зафиксировано $=2$:
$ underbrace<8 ;10>_< ext<два числа>> ;3 underbrace<;14 ;16>_< ext<два числа>> ;3 ; . ;3 ;. ; ext <и т.д.>$
$
1; \
2; 3; \
4; 5; 6;;;;;;;;; ext <—максимум три числа>\
7; 5; \
9; \
10; 17; \
18; 19; 20;;;;;;; ext <—снова три числа>\
21; 22; \
23; \
24; 25;.
$
$
1; \
2; 3; ;;;;;;;; ext <—сначала до двух>\
4; \
5; 6; \
7; 8; 9; ;;;;;;;; ext <—потом до трёх>\
10; 11; \
12; ;;;;;;;; ext <—возвращаемся к одному>\
13; 14; \
15; 16; 17; \
18; 19; 20; 21; ;;;;;;;; ext <—тут уже четыре>\
22; 23; 24; \
25; 26; ;;;;;;;; ext <—снова убывает >\
27; \
28; 29; \
30; 31; 32; \
33; 34; 35; 36; \
37; 38; 39; 40; 41; \
42; 43; 44; 45; \
46; 47; 48; \
49;
$