ПРИМЕР 1. Найти произведение десяти произвольных чисел. Числа вводить по очереди в переменную X (среди вводимых чисел нулевых нет) .
Пояснение. P – переменная для хранения произведения, до цикла ей присваивается значение 1; I – параметр цикла.
Программа
program Zadacha;
var P, X:real; I:integer;
begin
P:=1;
for I:=1 tо 10 do begin
write(‘Введите число: ’); read(X);
P:=P*X;
end;
write(‘Произведение равно ‘, P);
end.
ПРИМЕР 2. Цифры вводимого числа N выдать в обратном порядке.
Пояснение. В данной программе используется цикл с постусловием, т.е. как только целая часть при делении числа на 10 станет равна 0, программа прекращает свою работу.
Программа.
program Zadacha;
var
N, K, I : integer;
begin
write (‘введите число ’);
readln (N);
repeat
K:=N mod 10;
write (K);
N:=N div 10;
until N=0;
end.
ПРИМЕР 3. Задано N троек произвольных положительных чисел A, B, C. Вводя их по очереди и интерпретируя как длины сторон треугольника, определить, сколько троек может быть использовано для построения треугольника. (Числа A, B, C при вводе располагать в порядке возрастания ).
Пояснение. Три произвольных положительных числа могут трактоваться как стороны треугольника тогда и только тогда, когда сумма любых двух сторон будет больше третьей (неравенство треугольника). В нашем случае, когда ,достаточно проверить, чтобы самое большое число C было меньше суммы двух других, т.е. А + В. Переменная N задает количество троек чисел; в переменной K накапливается количество троек чисел, удовлетворяющих заданному условию, I-параметр цикла, изменяющийся от 1 до N с шагом 1.
Программа.
program Zadacha;
var
N, K : integer; A, B, C : real;
begin
write( ‘Введите количество троек чисел ’);
readln(N);
K := 0;
for I:=1 to N do
begin
write (‘ Введите A, B, C’); readln(A, B, C);
if C < A + B then K:= K + 1;
end;
write(‘K= ‘, K);
end.
ПРИМЕР 4.Дан массив А размером N . Требуется удалить K–й элемент из массива.
Пояснение. Удалить элемент, расположенный на K–м месте в массиве, можно, сдвинув весь “хвост” массива, начиная с (K +1) -го элемента, на одну позицию влево, т.е. выполняя операции для I=K, ...,N-1.
Программа.
program Zadacha;
var
N, K, I :iInteger;
A : array [1..100 ] of real;
begin
{Ввод элементов массива}
write ( ‘ введите количество элементов массива’);
readln(N);
write (‘введите номер элемента для удаления’);
readln (K);
{Ввод исходного массива}
for I := 1 tо N do read(A [I]);
{удаление K-того элемента}
for I := K tо N -1 do A[ I ] := A [I + 1];
{вывод полученного массива}
for I := 1 tо N-1 do write (A [I],’ ’);
end.
ПРИМЕР 5. Дан массив А размером N. Требуется удалить элементы из массива равные вводимому Х.
Пояснение. Сравнивая элементы массива с заданным значением Х, в случае если элемент равен Х, удаляем элемент, сдвинув весь «хвост» массива, начиная с номера найденного элемента, на одну позицию влево, т.е. выполняя операции для I=K, ...,N-1. Проверку продолжаем до тех пор, пока не просмотрим все элементы массива.
Программа.
program Zadacha;
var
N, Х, I, I1 : integer;
A : array [1..100 ] Of Real;
begin
{Ввод элементов массива}
write ( ‘ введите количество элементов массива’);
readln(N);
write (‘введите значение элемента для удаления’);
readln (Х);
{Ввод исходного массива}
for I := 1 tо N do read(A [I] );
{удаление элемента равного Х}
I:=1;
while I<= N do
begin
if A[I] = X then
begin
for I1:= I tо N -1 do A[ I1 ] := A [I1 + 1];
N:=N-1;
end
else I:=I+1;
end;
{вывод полученного массива}
for I := 1 tо N do write (A [I],’ ’);
end.
ПРИМЕР 6. Дан массив A размером N. Определить среднее значение элементов массива. Найти далее номер элемента массива, наиболее близкого к среднему значению.
Пояснение. Расстояние между двумя числами a и b определяется как модуль разности между ними | a – b |. Поэтому для определения элемента, наиболее близкого к среднему значению, необходимо рассматривать модули разностей между элементами массива и средним арифметическим и определять номер элемента массива, для которого этот модуль минимален.
Программа.
program Zadacha;
Var
I, N, K : integer;
M, S : real;
A : array[ 1..100 ] of real;
begin
write( ‘Введите количество элементов ’ );
readln (N);
write ( ‘Введите элементы массива’);
for I := 1 tо N do readln (A [ I ]);
{Нахождение суммы элементов}
S := 0;
for I := 1 tо N do S := S + A [ I ];
S := S/N; {Определение среднего арифметического}
K := 1; M := abs (A [ 1 ] - S);
for I := 2 tо N do
if M > abs (A [ I ] - S) then begin
M := abs( A [ I ] - S);
K := I;
end;
write (‘ номер элемента равен ‘, K);
end.
ПРИМЕР 7. Дан целочисленный массив A размером MxN. Составить программу сортировки элементов каждого столбца в порядке возрастания.
Пояснение. Сравнивая два элемента заданного J столбца, в зависимости от результата сравнения меняем элементы в столбце местами или оставляем все без изменения.
Программа.
program Zadacha;
var
A : array[1..10,1..10] of integer;
I, M, N, J, I1, T: integer;
begin
read (M,N); { Ввод размерности массива A}
{Ввод массива A}
for I:=1 to M do
begin
for J:=1 to N do read(A[I,J]);
end;
writeln;
{ перестановка элементов столбца массива A}
for J:=1 to N do
begin
for I:=1 to M-1 do
begin
for I1:=I+1 to M do
iF A[I1,J]<A[I,J] then
begin
T:=A[I,J];
A[I,J]:=A[I1,J];
A[I1,J]:=T;
end;
end;
end; { Печать преобразованного массива}
for I:=1 to M do
begin
for J:=1 to N do write(A[I,J],’ ’);
writeln;
end;
end.
ПРИМЕР 8. Дан целочисленный массив A размером MxN. Составить программу перестановки строк в данном массиве в порядке убывания произведений элементов в каждой строке.
Пояснение. Высчитывая произведения двух строк и сравнивая их между собой, в зависимости от результата сравнения либо меняем строки массива A, либо оставляем все без изменения.
Программа.
program Zadacha;
var
A : array[1..10,1..10] of integer;
I, J, M, N, I1, T, PI, PI1 : integer;
begin
read(M,N); { Ввод размерности массива A}
{Ввод массива A}
for I:=1 to M do
begin
for J:=1 to N do read(A[I,J]);
end;
{ перестановка строк массива A}
for I:=1 to M-1 do
begin
for I1:=I+1 to M do
begin
PI:=1; PI1:=1;
for J:=1 to N do
begin
PI:=PI*A[I,J];
PI1:=PI1*A[I1,J];
end;
if PI<PI1 then
begin
for J:=1 to N do
begin
T:=A[I,J];
A[I,J]:=A[I1,J];
A[I1,J]:=T;
end;
end;
end;
end; { Печать преобразованного массива}
for I:=1 to M do
begin
for J:=1 to N do write(A[I,J],’ ’);
writeln;
end;
end.
ПРИМЕР 9. Определить, имеются ли в массиве А[5,4] столбцы, состоящие из одних и тех же элементов, если такие есть, выдавать номера одинаковых столбцов, если нет – выдать сообщение.
Пояснение. Сортируем элементы столбцов. Сравнивая элементы в столбцах, в случае если количество одинаковых элементов совпадает с количеством элементов в столбце выдаем номера этих столбцов на печать и изменяем флажок S. Если флажок свое значение не поменял значит, столбцов с одинаковыми элементами нет о чем выдается сообщение.
Программа.
program Zadacha;
var
A : array[1..5,1..4] of integer;
I, J, I1, N, S, T, : integer;
begin
{Ввод массива A}
for I:=1 to 5 do
begin
for J:=1 to 4 do read(A[I,J]);
end;
{ сортировка элементов столбца массива A}
for J:=1 to 4 do
begin
for I:=1 to 4 do
begin
for I1:=I+1 to 5 do
if A[I1,J]I<A[I,J] then
begin
T:=A[I,J];
A[I,J]:=A[I1,J];
A[I1,J]:=T;
end;
end;
end;
{Проверяем имеются ли столбцы с одинаковыми элементами }
S:=0;
for J:=1 to 3 do
begin
for J1:=J+1 to 4 do
begin
N:=0;
for I:=1 to 5 do if A[I,J]=A[I,J1] then N:=N+1;
if N=5 then
begin
S:=1;
writeln (‘одинаковые столбцы’, J:3,J1:3);
end;
end;
end;
if S=0 then writeln(‘одинаковых столбцов нет’);
end.
ПРИМЕР. 10. Дан целочисленный массив A размером NxN. Составить программу, которая меняет местами элементы, расположенные ниже главной диагонали с элементами, расположенными выше главной диагонали в зеркальном отображении относительно главной диагонали.
Пояснение. Определяем участок сектора, расположенный ниже главной диагонали и меняем элементы местами.
Программа 7.34.
program Zadacha;
var
A : array[1..100,1..100] of integer;
I, M, N, J, T : integer;
begin
read(M,N); { Ввод размерности массива A}
{Ввод массива A}
for I:=1 to M do
begin
for J:=1 to N do read(A[I,J]);
end;
{ перестановка элементов массива A}
for I:=2 to N do
begin
for J:=1 to I-1 do
begin
T:=A[I,J];
A[I,J]:=A[J,I];
A[J,I]:=T;
end;
end;
{ Печать преобразованного массива}
for I:=1 to M do
begin
for J:=1 to N do write(A[I,J],’ ’);
writeln;
end;
end.
ПРИМЕР. 11. Дан целочисленный массив A размером NxN. Составить программу, которая меняет местами элементы, расположенные ниже побочной диагонали с элементами, расположенными выше побочной диагонали в зеркальном отображении относительно побочной диагонали.
Пояснение. Определяем сектор элементов, расположенных выше побочной диагонали и, используя закономерности изменений номера столбца и номера строки, меняем элементы местами.
Программа.
program Zadacha;
var
A : array[1..100,1..100] of integer;
I, M, N, J, T : integer;
begin
read(M,N); { Ввод размерности массива A}
{Ввод массива A}
for I:=1 to M do
begin
For J:=1 To N Do read(A[I,J]);
end;
{ перестановка элементов массива A}
for I:=1 to N-1 do
begin
for J:=1 to N-I do
begin
T:=A[I,J];
A[I,J]:=A[N-J+1,N-I+1];
A[N-J+1,N-I+1]:=T;
end;
end;
{ Печать преобразованного массива}
for I:=1 To M Do
begin
for J:=1 to N do write(A[I,J],’ ’);
writeln;
end;
end.
ПРИМЕР. 12. В тексте заменить все буквы “A” на буквы “B”.
Программа
program Zadacha;
var
ST : string;
I : integer;
begin
write (‘Введите текст’);
readln (ST);
{ Замена букв ‘A’ на буквы ‘B’}
for I:=1 to length(ST) do If ST[I] = ‘A’ then ST[I] := ‘B’;
writeln (‘Вывод полученного текста:’); Write(ST);
end.
ПРИМЕР. 13. Если в заданном тексте между словами встречается более одного пробела, убрать лишние.
Пояснение. Определяем номер позиции, с которой в тексте стоит два пробела. Удаляем один из них и повторяем действие, пока между словами не останется по одному пробелу.
Программа.
program Zadacha;
var
ST : String;
N : byte;
begin
write (‘Введите текст’); readln (ST);
{ Удаление лишних пробелов}
N:=Pos(‘ ‘,ST);
while N <> 0 Do
begin
delete(ST, N, 1);
N:=pos(‘ ‘,ST);
end;
writeln (‘Вывод полученного текста:’); Write(ST);
end.
ПРИМЕР. 14. Найти N первых простых чисел (решение может быть дано с использованием объектно-ориентированного программирования).
Пояснение. Практически любую задачу, которую возможно реализовать стандартными методами, можно решить, используя принципы объектно-ориентированного программирования, хотя его преимущество в полной мере можно оценить только при разработке программных систем большого объема.
При решении задач с помощью концепции объектно-ориентированного программирования необходимо провести исследование предметной области, в данном случае это будет область целых чисел. Так как мы будем исследовать числа, то в роли основного объекта будет выступать объект «число», в котором определим методы внесения значений в поле объекта и метод, определяющий является ли число простым. То есть вначале программист описывает все свойства и задает все методы объекта, а только затем приступает к разработке основного текста программы, манипулируя уже созданными компонентами. Это одно из основных отличий принципов разработки программ в структурном и объектно-ориентированном программировании.
Программа
type number = object
X: word;
procedure Get(cur_x: word);
function Simple: boolean;
end;
procedure Number.Get;
begin
X := cur_x;
end;
function Number.Simple: boolean;
war i, kol: word;
begin
Kol:=0;
for i:=2 to (X div 2) do if (X mod i=0) then inc(kol);
if kol=0 then simple := true else simple := false;
end;
var num: number;
Count, n: byte;
Cur_n:word;
begin
write(‘ Введите количество ’);
readLn(n);
Count:=0;
Cur_n:=2;
while Count<=n do begin
Num.Get(Cur_x);
If Num.Simple then begin Inc(Count);write(Num.X:4);
End;
end;
end.
При решении задач, использующих принципы ООП, текст основной программы обычно получается не очень большим, так как все основные алгоритмы принято включать в методы заданных объектов, которые могут объединяться в более общие. Тем самым создается развернутая иерархическая структура, которая является более легкой для отладки программы и понимания принципов ее работы. При решении нашей задачи мы все же не полностью придерживались концепции ООП, так как она предполагает использование переменных только объектного типа данных. Если в нашем случае мы будем придерживаться строгой концепции, то текст программы значительно возрастет, поэтому при решении задач, в частности, на языке программирования Паскаль очень часто приходится сочетать объектные и стандартные типы данных.