Контрольная работа по «Программирование на языках высокого уровня»

Автор: Пользователь скрыл имя, 08 Декабря 2011 в 08:53, контрольная работа

Описание работы

Определить, лежиттли заданная точка на одной из сторон треугольника, заданого координатами своих вершин.

Работа содержит 1 файл

контрольная по ЯВУ.doc

— 1.18 Мб (Скачать)

Контрольная работа

по  курсу

«Программирование на языках высокого уровня»

Задача 1

Определить, лежиттли заданная точка на одной из сторон треугольника, заданого координатами своих вершин.

Блок-схема  алгоритма

 

Текст программы

Program N_1;

var x,y,x1,x2,x3,y1,y2,y3,k1,k2,k3,b1,b2,b3,d1,d2,d3:Real;

    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 вместе с текущим не  положительным элементом не меньше S/2}

      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-1);

  For i:=1 to ind1-1 do Write(B[i]:0:3,' '); Writeln;

  Writeln('S1 = ',S1:0:3,' ');

  {Вывод элементов второго массива и суммы его элементов}

  Writeln('Третий  массив; ','Количство элементов ',Ind2-1);

  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 - исходная  матрица

Информация о работе Контрольная работа по «Программирование на языках высокого уровня»