Автор: Пользователь скрыл имя, 08 Декабря 2011 в 08:53, контрольная работа
Определить, лежиттли заданная точка на одной из сторон треугольника, заданого координатами своих вершин.
Контрольная работа
по курсу
«Программирование на языках высокого уровня»
Задача 1
Определить, лежиттли заданная точка на одной из сторон треугольника, заданого координатами своих вершин.
Блок-схема алгоритма
Текст программы
Program N_1;
var x,y,x1,x2,x3,y1,y2,y3,k1,k2,
b:boolean;
begin
Write('x1, y1 '); Readln(x1,y1);
Write('x2, y2 '); Readln(x2,y2);
Write('x3, y3 '); Readln(x3,y3);
Write('x, y '); Readln(x,y);
d1:=Sqrt(Sqr(x2-x1)+Sqr(y2-y1)
d2:=Sqrt(Sqr(x3-x2)+Sqr(y3-y2)
d3:=Sqrt(Sqr(x3-x1)+Sqr(y3-y1)
{Проверка существования треугольника}
b:=(d1<d2+d3) and (d2<d1+d3) and (d3<d1+d2);
if b then
begin
{Построение уравнений прямых}
if x1<>x2 then
begin
k1:=(y1-y2)/(x1-x2);
b1:=y1-k1*x1;
end;
if x2<>x3 then
begin
k2:=(y2-y3)/(x2-x3);
b2:=y2-k2*x2;
end;
if x1<>x3 then
begin
k3:=(y3-y1)/(x3-x1);
b2:=y3-k3*x3;
end;
{Проверка принадлежности точки стороне треугольника}
if x1<>x2 then b:=(y=k1*x+b1) else b:=(x=x1) and (d1=abs(y-y1)+abs(y-y2));
if x2<>x3 then b:=b or (y=k2*x+b2) else b:=b or ((x=x2) and (d2=abs(y-y2)+abs(y-y3)));
if x1<>x3 then b:=b or (y=k3*x+b3) else b:=b or ((x=x3) and (d3=abs(y-y1)+abs(y-y3)));
if b then Writeln('Да') else Writeln('Нет');
end
else Writeln('Треугольник не существует');
Readln;
end.
Задача 2
Дана строка S,состоящая из n символов. Проверить, содержит ли данная строка подстроку "аа". Определить позицию первого вхождения подстроки и общее количество вхождений.
Блок-схема алгоритма
Текст программы
Program N_2;
var S:String;
n,i,P,c:Integer;
{S - исходная строка
n - ее
длина (определяется после
P - позиция вхождения подстроки "аа" ("аа" - латинские символы) в исходную строку
с - количество таких вхожднеий}
begin
Write('S = '); Readln(S);
n:=Length(S);
P:=Pos('aa',S);
c:=0;
{Проверка наличия вхождения}
if P<>0 then
begin
Writeln('Yes - ',P);
For i:=1 to n-1 do
if S[i]+S[i+1]='aa' then c:=c+1;
end
else Writeln('No');
Writeln(C);
Readln;
end.
Задача 3
Пересортировать все элементы одномерного массива и разделить его на две такие части, чтобы разность между суммами элементов в каждой из этих частей оказалась бы наименьшей. Результаты выдать на экран.
Блок-схема алгоритма
Текст программы
Program N_3;
{Идея алгоритма:
1. Массив сортируется в порядке возрастания;
2. Если сумма всех элементов отрицательная, то просматриваем массив
от начала и
если сумма во втором массиве вместе с текущим (отрицательным) элементом
из исходного массива больше
половины суммы исходного
то записываем его во второй массив,
иначе записываем в третий массив;
3. Если сумма всех элементов исходного массива положительная,
то просматриваем его от конца к началу и
если сумма во втором массиве
вместе с текущим (
из исходного массива меньше
половины суммы исходного
то записываем его во второй массив,
иначе записываем в третий массив;}
const MaxN=100; {Максимальный размер массива}
var a:array[1..MaxN] of real; {Исходный массив}
b,c:Array[1..MaxN] of real; {Массивы после решения}
{i,j - переменные для организации циклов
n - вводимый размер массива
Num - Индекс минимального элемента массива (при сортировке)
ind1, ind2 - индексы элементов второго и третьего массивов
S,S1,S2 - суммы элементов в каждом массиве
Min - Минимальный элемент в исходном массиве (для сортировки)
v - логическая переменная для проверки чисел массива}
i,j,n,Num,ind1,ind2:Integer;
S,S1,S2,Min:Real;
v:boolean;
begin
{Маасив формируется генератором случайных чисел из интервала (-100; 100)}
Randomize;
Write('n = ');Readln(n);
S:=0;
Writeln('Исходный массив');
For i:=1 to n do
begin
A[i]:=100-random*200;
{Вывод элементов массива с точностью до 3-х десятичных знаков}
Write(A[i]:0:3,' ');
S:=S+A[i];
end;
Writeln;
Writeln('S = ',S*2:0:3);
{Сортировка плученного массива}
For i:=1 to n-1 do
begin
{Поиск
минимального элемента в
не отсортированной части массива}
min:=A[i]; Num:=i;
For j:=i+1 to n do
if A[j]<min then
begin
min:=A[j];
Num:=j;
end;
A[Num]:=A[i];
A[i]:=Min
end;
{Вывод массива после сортировки}
Writeln('Массив после сортировки');
For i:=1 to n do Write(A[i]:0:3,' '); Writeln;
{Распределение элементов исходного массива на 2}
S1:=0;S2:=0;
ind1:=1; ind2:=1;
{Проверим, есть
ли в массиве числа, модуль
которых меньше модуля
всех элементов массива}
v:=False;
For i:=1 to n do
begin
v:=v or (Abs(A[i])<Abs(S/2));
if v then break;
end;
{}
if v then
begin
{Если сумма элементов исходного массива не положительна}
if S<=0 then
For i:=1 to N do
begin
{Если S1 вместе с текущим не
положительным элементом не
if (S1+A[i]>=S/2) and (A[i]<=0) then
begin
{то записываем его во второй массив
добавляем к сумме его
переводим индекс на следующую ячеку массива}
b[ind1]:=A[i];
S1:=S1+A[i];
ind1:=ind1+1;
end
else
begin
{иначе записываем его в третий массив
добавляем к сумме его
переводим индекс на следующую ячеку массива}
c[ind2]:=A[i];
S2:=S2+A[i];
ind2:=ind2+1;
end;
end
else
begin
For i:=N downto 1 do
begin
if (S1+A[i]<=S/2) and (A[i]>=0) then
begin
{то записываем его во второй массив
добавляем к сумме его
переводим индекс на следующую ячеку массива}
b[ind1]:=A[i];
S1:=S1+A[i];
ind1:=ind1+1;
end
else
begin
{то записываем его в третий массив
добавляем к сумме его
переводим индекс на следующую ячеку массива}
c[ind2]:=A[i];
S2:=S2+A[i];
ind2:=ind2+1;
end;
end
end;
End
else
begin
For i:=1 to n do
begin
if (i mod 4=1) or (i mod 4=0)
then
begin
B[ind1]:=A[i];
Ind1:=Ind1+1;
S1:=S1+A[i];
end
else
begin
C[ind2]:=A[i];
Ind2:=Ind2+1;
S2:=S2+A[i];
end;
end;
end;
{Вывод элементов второго массива и суммы его элементов}
Writeln('Второй
массив: ','Количство элементов ',Ind1-
For i:=1 to ind1-1 do Write(B[i]:0:3,' '); Writeln;
Writeln('S1 = ',S1:0:3,' ');
{Вывод элементов второго массива и суммы его элементов}
Writeln('Третий
массив; ','Количство элементов ',Ind2-
For i:=1 to ind2-1 do Write(C[i]:0:3,' '); Writeln;
Writeln('S2 = ',S2:0:3,' ');
Writeln('Разность между суммами: ', ABS(S1-S2):0:3);
Readln;
end.
Задача 4
Дана квадратная матрица целых чисел порядка n. Получить последовательность b1, b2, …, bn, где bi – это минимальный элемент, находящийся в начале i-й строки матрицы до элемента, находящегося на главной диагонали включительно.
Блок-схема алгоритма
Текст программы
Program N_4;
const Nmax=100; {Максимальн допустимый размер исходного массива}
{n - размер исходного массива
i,j - параметры цикла
NumI, NumJ - координаты строки и столбца минимального элемента массива
A - исходная матрица
Информация о работе Контрольная работа по «Программирование на языках высокого уровня»