Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по Паскалю.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
2 Мб
Скачать
☆

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

ПРИМЕР 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.