Примеры задач

Одномерные массивы


Пусть даны вещественное число а и массив вещественных чисел Q[1..n].Выбрать два числа из массива Q таким образом, чтобы числа а, b, с могли быть длинами сторон треугольника. Подсчитайте сколько пар таких чисел а и b в массиве Q.

Методика ререния

Используемые переменные:
a, b, c – длины сторон;
m – кол-во пар, которые могут быть сторонами треугольника;
q – массив;
I, j – параметры цикла.
А так же, понадобится константа n – количество элементов массива.

Для начала считываем с экрана число a , в цикле от 1 до n генерируем случайным образом элементы массива и выводим их на экран.
Три числа могут быть длинами сторон треугольника в том случае, если каждое из них меньше суммы двух других чисел. То есть, a, b и c являются длинами сторон треугольника если a < b+c, b < a+c и c < a+b .
Нам необходимо перебрать все пары чисел в массиве и проверить, соответствуют ли они данному условию.
Для этого организуем два цикла (один вложен в другой). Первый цикл (от I=1 до n ) перебирает элементы массива по порядку. Второй (от j=n до i+1 ), вложе6нный, перебирает их в обратном порядке, начиная с конца до i+1 -го элемента.
Во втором цикле переменным b и c присваиваем значения элементов mas[i] и mas[j] , затем проверяем условие: a < b+c, b < a+c и c < a+b . Если данное условие выполняется, то числа a, b, c могут быть длинами сторон треугольника, выводим пару a и b на экран, количество искомых пар увеличиваем на 1(предварительно в начале программы количество необходимо обнулить).
После выполнения цикла выводим на экран получившееся количество.

Листинг программы

Program ex2_3;
Uses crt;
const n=5;
Type mas=Array[1..n] Of Real;
Var q:mas;
a,b,c:real;
i,j,m:integer;
Begin clrscr; Writeln ('Введите а');
Readln(a);
Randomize; {Формирование массива Q}
Writeln ('Массв: ');
For i:=1 To n Do
begin
q[i]:=random+random(10);
Write(q[i]:4:1)
end;
Writeln;
{Выбор и проверка}
Writeln('--B-----C--');
For i:=1 To n Do
For j:=n DownTo i+1 Do
Begin
b:=q[i];
c:=q[j];
If (b<>0) And (c<>0) And(a<>0) Then
Begin
If (a+b>c)And(a+c>b)And(c+b>a)Then
Begin
Writeln(b:1:1,' | ',c:1:1);
Writeln;
Inc(m);
End;
End;
End;
Writeln;
Writeln(m,' пар могут быть сторонами треугольника');
Readkey;
END.

Запустить программу






Назад