Решение типичных задач на языке Pascal
Кривощекова Вера Анатольевна
Учитель информатики
МАОУ Петелинская СОШ
Будет интесесно для учителей, которые приступили к изучению раздела программирование на языке Паскаль. Для начинающих учеников, которые осваивают язык программирования Паскаль. Для увлеченных людей, которые решили сами для себя освоить языки программирования
Задачи на языке Pascal с решениями.doc
Кривощекова Вера Анатольевна
Учитель информатики
МАОУ Петелинская СОШ
Решение типичных задач на языке Pascal
Геометрические задачи
Задача 1
Дан круг (X0, Y0, R) и точка (X, Y), где X0, Y0, R, X, Y вещественные числа.
Определить, лежит ли эта точка внутри данного круга.
Пример
(0, 0, 1) и (0.5, 0.5)
Результат: TRUE
Вариант решения
var X0, Y0, R, X, Y: Real;
Code (Pascal):
begin
ReadLn (X0, Y0, R, X, Y);
WriteLn (Sqr (X X0) + Sqr (Y Y0) <= Sqr (R));
end.
Задача 2
Дан треугольник с вершинами (X1, Y1); (X2, Y2); (X3, Y3) и точка (X, Y). Все Xi, Yi
вещественные числа.
Определить, лежит ли эта точка внутри данного треугольника.
Пример
(0, 0); (3, 0); (0, 3) и (1, 1)
Результат: TRUE
Вариант решения
Code (Pascal):
const eps = 1E5;
var X1, Y1, X2, Y2, X3, Y3, X, Y: Real;
S0, S1, S2, S3: Real;
function S (X1, Y1, X2, Y2, X3, Y3: Real): Real;
var a, b, c, p: Real;
begin
a := Sqrt (Sqr (X1 X2) + Sqr (Y1 Y2));
b := Sqrt (Sqr (X1 X3) + Sqr (Y1 Y3));
c := Sqrt (Sqr (X3 X2) + Sqr (Y3 Y2));
p := 0.5 * (a + b + c);
S := Sqrt (p * (p a) * (p b) * (p c));
end; {func S}
begin
ReadLn (X1, Y1, X2, Y2, X3, Y3, X, Y); S0 := S (X1, Y1, X2, Y2, X3, Y3);
S1 := S (X, Y, X2, Y2, X3, Y3);
S2 := S (X1, Y1, X, Y, X3, Y3);
S3 := S (X1, Y1, X2, Y2, X, Y);
WriteLn (S0 + eps >= S1 + S2 + S3);
end.
Задача 3
Дан прямоугольник, заданный двумя противоположными вершинами (X1, Y1); (X2, Y2) и
точка (X, Y). Все Xi, Yi вещественные числа.
Определить, лежит ли эта точка внутри данного прямоугольника.
Пример
(1, 1); (7, 4) и (4, 2)
Результат: TRUE
Вариант решения
var X1, Y1, X2, Y2, X, Y: Real;
Code (Pascal):
begin
ReadLn (X1, Y1, X2, Y2, X, Y);
WriteLn ((Abs (X1 X2) = Abs (X1 X) + Abs (X2 X)) and
(Abs (Y1 Y2) = Abs (Y1 Y) + Abs (Y2 Y)));
end.
Задача 1
Дано число a (0..999999999).
Найти сумму цифр числа a.
Пример
a = 12345
Результат: 15
Вариант решения
Задачи на числа
Code (Pascal):
var a: LongInt;
S: Byte;
begin
ReadLn (a);
S := 0;
while a > 0 do
begin
Inc (S, a mod 10);
a := a div 10;
end; {while}
WriteLn (S);
end. Задача 2
Дано число a (0..999999999).
Вывести это число в обратном порядке.
Пример
a = 12345
Результат: 54321
Вариант решения
Code (Pascal):
var a: LongInt;
begin
ReadLn (a);
repeat
Write (a mod 10);
a := a div 10;
until a = 0;
end.
Задача 3
Дано число a (0..999999999).
Определить, является ли оно простым.
Замечание: число называется простым, елси оно делится только на 1 и на самого себя.
Пример
a = 12345
Результат: FALSE
Вариант решения
Code (Pascal):
var a, N: LongInt;
Prost: Boolean;
begin
ReadLn (a);
Prost := True;
for N := 2 to a div 2 do
if a mod N = 0 then
begin
Prost := False;
Break;
end; {if}
WriteLn (Prost);
end.
Задача 4
Дано число a (0..999999999).
Разложить это число на простые множители.
Пример
a = 12345
Результат: 3 5 823 Вариант решения
Code (Pascal):
var a, N: LongInt;
function Prost (X: LongInt): Boolean;
var N: LongInt;
begin
for N := 2 to X div 2 do
if X mod N = 0 then
begin
Prost := False;
Exit;
end; {if}
Prost := True;
end; {func Prost}
begin
ReadLn (a);
while a > 0 do
if Prost (a) then
begin
Write (a);
Break;
end else
begin
N := 2;
while N <= a div 2 do
begin
if (a mod N = 0) and Prost (N) then
begin
Write (N, ' ');
a := a div N;
Break;
end; {if}
Inc (N);
end; {while}
end; {if}
end.
Задача 5
Дано число S (0..999999999), обозначающее количество секунд.
Вычислить числа Hour, Minute (0..59), Second (0..59), показывающие число часов, минут и
секунд соответственно в числе S.
Пример
S = 12345
Результат: 3:25.45
Вариант решения
Code (Pascal):
var S: LongInt;
Hour, Minute, Second: Integer;
begin
ReadLn (S);
Second := S mod 60;
Minute := S div 60;
Hour := Minute div 60; Minute := Minute mod 60;
WriteLn (Hour, ':', Minute, '.', Second);
end.
Задача 6
Дано натуральное число a (1..999999999).
Представить его в виде суммы квадратов двух натуральных чисел или сообщить о
невозможности такого представления.
Пример
a = 29
Результат: 2, 5
Вариант решения
Code (Pascal):
var a, n: LongInt;
b: Real;
begin
ReadLn (a);
for n := 1 to Trunc (Sqrt (a)) do
begin
b := Sqrt (a Sqr (n));
if (Int (b) = b) and (b > 0) then
begin
WriteLn (n, ', ', Trunc (b));
Exit;
end; {if}
end; {for}
WriteLn ('No');
end.
Задача 7
Дано число a (1..999999999).
Определить, является ли оно совершенным.
Замечание: натуральное число называется совершенным, если оно равно сумме всех своих
собственных делителей, включая 1.
Пример
a = 496
Результат: TRUE
Вариант решения
Code (Pascal):
var a, i, S: LongInt;
begin
ReadLn (a);
S := 1;
for i := 2 to a div 2 do
if a mod i = 0 then Inc (S, i);
WriteLn (S = a);
end. Задача 8
Даны два натуральных числа: m, n (1..999999999), образующие дробь вида m / n.
Сократить дробь, что бы числитель и знаменатель были взаимнопростые.
Пример
m = 256; n = 64
Результат: 4 1
Вариант решения
Code (Pascal):
var m, n, i: LongInt;
begin
ReadLn (m, n);
i := 2;
while i <= m do
begin
if (m mod i = 0) and (n mod i = 0) then
begin
m := m div i;
n := n div i;
end; {if}
Inc (i);
end; {while}
WriteLn (m, ' ', n);
end.
Задачи на строки
Задача 1
Дана строка S, состоящая из латинских букв и пунктуационных знаков.
Преобразовать эту строку к верхнему регистру.
Пример
S = 'Hello, World!'
Результат: HELLO, WORLD!
Вариант решения
Code (Pascal):
var S: string;
i: Integer;
begin
ReadLn (S);
for i := 1 to Length (S) do
S[i] := UpCase (S[i]);
WriteLn (S);
end.
Задача 2
Дана строка S, состоящая из латинских букв и пробелов.
Определить количество слов в данной строке.
Замечание: словом считается любая последовательность максимальной долины, состоящая из латинских букв и не содержащая пробелов.
Пример
S = 'Hello World'
Результат: 2
Вариант решения
var S: string;
i, Count, State: Integer;
Code (Pascal):
begin
ReadLn (S);
Count := 0;
State := 1;
for i := 1 to Length (S) do
Case State of
1: if UpCase (S[I]) in ['A'..'Z'] then
begin
Inc (Count);
State := 2;
end; {if}
2: if not (UpCase (S[I]) in ['A'..'Z']) then State := 1;
end; {case}
WriteLn (Count);
end.
Задача 3
Дано 10 строк, вводимых с клавиатуры.
Вывести их в алфавитном порядке.
Пример
Marina
Aleksej
Sergej
Ivan
Peter
Lubov
Irina
Pavel
Natasha
Kostya
Результат:
Aleksej
Irina
Ivan
Kostya
Lubov
Marina
Natasha
Pavel
Peter
Sergej Вариант решения
Code (Pascal):
const N = 10;
type TStrs = array[1..N] of string;
var S: TStrs;
i: Integer;
procedure Sort (var S: TStrs);
var i, j: Integer;
tmp: string;
begin
for i := 1 to N 1 do
for j := i + 1 to N do
if S[i] > s[j] then
begin
tmp := S[i];
S[i] := S[j];
S[j] := tmp;
end; {if}
end; {proc Sort}
begin
for i := 1 to N do
ReadLn (S[i]);
Sort (S);
WriteLn;
for i := 1 to N do
WriteLn (S[i]);
end.
Задача 4
Дана строка S.
Определить, является ли она полиндромом.
Замечание: полиндромом называются строки, которые одинаково читаются как слева
направо, так и справаналево.
Пример
S = 'asdfgfdsa'
Результат: TRUE
Вариант решения
Code (Pascal):
var S: string;
i: Integer;
Polindr: Boolean;
begin
ReadLn (S);
Polindr := True;
for i := 1 to Length (S) div 2 do
if S[i] <> S[Length(S)i+1] then
begin
Polindr := False;
Break;
end; {if}
WriteLn (Polindr); end.
Задача 5
Дана строка S, состоящая только из символов '0' или '1'.
Подсчитать длинну самой длинной последовательности, состоящей только из '1'.
Пример
S = '111110011110110'
Результат: 5
Вариант решения
Code (Pascal):
var S: string;
i, Len, MaxLen: Integer;
begin
ReadLn (S);
MaxLen := 0;
Len := 0;
S := Concat (S, '0'); {ставим барьер}
for i := 1 to Length (S) do
if S[i] = '0' then
begin
if Len > MaxLen then MaxLen := Len;
Len := 0;
end else Inc (Len);
WriteLn (MaxLen);
end.
Задачи на массивы
Задача 1
Дан массив A, состоящий из 100 натуральных чисел, заполненный случайным образом
(каждый элемент находится в промежутка от 1 до 1000).
Отсортировать данный массив по неубыванию и вывести на экран.
Вариант решения
Code (Pascal):
const n = 100;
var A: array[1..n] of Word;
i, j, tmp: Integer;
begin
Randomize;
for i := 1 to n do
A[i] := Random (1000) + 1;
for i := 1 to n 1 do
for j := n downto 2 do
if A[j] < A[j1] then
begin
tmp := A[j];
A[j] := A[j1];
a[j1] := tmp;
end; {if} for i := 1 to n do
Write (A[i]:2);
end.
Задача 2
Дан массив A, состоящий из 10 целых чисел.
Вывести все элементы, значение которых превосходит среднего арифметического
элементов массива.
Пример
A: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Результат: 6, 7, 8, 9, 10
Вариант решения
const n = 10;
Code (Pascal):
var A: array[1..n] of Integer;
i, Sum: Integer;
begin
Sum := 0;
for i := 1 to n do
begin
Write ('A[', i, '] = ');
ReadLn (A[i]);
Inc (Sum, A[i]);
end; {for}
WriteLn;
for i := 1 to n do
if A[i] > Sum div n then WriteLn (A[i]);
end.
Задачи на матрицы
Задача 1
Дана матрица A размерностью 3 x 3, состоящая из целых чисел.
Найти разность между максимальным и минимальным элементами данной матрицы.
Пример
A:
12 44 37
8 25 32
19 28 41
Результат: 36
Вариант решения
Code (Pascal):
var A: array[1..3,1..3] of Integer;
i, j, Max, Min: Integer;
begin for i := 1 to 3 do
for j := 1 to 3 do
begin
Write ('A[', i, ',', j, '] = ');
ReadLn (A[i,j]);
end; {for}
Max := A[1,1];
Min := A[1,1];
for i := 1 to 3 do
for j := 1 to 3 do
begin
if Max < A[i,j] then Max := A[i,j];
if Min > A[i,j] then Min := A[i,j];
end; {for}
WriteLn (Max Min);
end.
Задача 2
Дана матрица A размерностью 5 x 5.
Заполнить ее следующим образом:
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
и вывести на экран.
Вариант решения
Code (Pascal):
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; {for}
end.
Задача 3
Дана матрица A размерностью 5 x 5.
Заполнить ее следующим образом:
1 1 1 1 1
0 1 1 1 0
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
и вывести на экран.
Вариант решения
Code (Pascal): 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
if Abs (j 3) <= Abs (i 3) then A[i,j] := 1
else A[i,j] := 0;
for i := 1 to 5 do
begin
for j := 1 to 5 do
Write (A[i,j]:2);
WriteLn;
end; {for}
end.
Задача 4
Дана матрица A размерностью 5 x 5.
Заполнить ее следующим образом:
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
и вывести на экран.
Вариант решения
Code (Pascal):
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
if Odd (i) then A[i,j] := j + (i 1) * 5
else A[i,j] := 6 j + (i 1) * 5;
for i := 1 to 5 do
begin
for j := 1 to 5 do
Write (A[i,j]:3);
WriteLn;
end; {for}
end.
Задача 5
Дана матрица A размерностью 5 x 3, состоящая из целых чисел.
Найти номер строки, в которой сумма элементов максимальна.
Пример
A:
1 2 3
0 0 0
5 5 5
2 8 6
2 4 3
Результат: 4 Вариант решения
Code (Pascal):
var A: array[1..5,1..3] of Integer;
i, j, Sum, Max, Imax: Integer;
begin
for i := 1 to 5 do
for j := 1 to 3 do
begin
Write ('A[', i, ',', j, '] = ');
ReadLn (A[i,j]);
end; {for}
for i := 1 to 4 do
begin
Sum := 0;
for j := 1 to 3 do
Inc (Sum, A[i,j]);
if (Sum > Max) or (i = 1) then
begin
Imax := i;
Max := Sum;
end; {if}
end; {for}
WriteLn (Imax);
end.
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Решение типичных задач на языке Pascal
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.