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

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

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

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

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

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

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

     B - массив из минимальных элементов строк матрицы A

     min - минимальный элемент в каждой  строке матрицы А}

Var n,i,j,NumI,NumJ:Integer;

    A:array[1..Nmax,1..Nmax] of Integer;

    B:array[1..Nmax] of Integer;

    min:Integer;

begin

  {Задание размера исходной матрицы}

  Write('n = '); Readln(n);

  {Матрица заполняется случайными целыми числами из промежутка (-100; 102)}

  Randomize;

  For i:=1 to n do

  begin

    For j:=1 to n do

    begin

      A[i,j]:=100-random(200);

      {Вывод элемента матрицы на экран}

      Write(A[i,j],' ')

    end;

    Writeln;

  end;

  Writeln;

  {Решение основной  задачи}

  For i:=1 to n do

  begin

    {Минимальным значением назначается первый элемент каждой строки}

    Min:=A[i,1]; NumI:=i; NumJ:=1;

    For j:=1 to i do

      {Если текущий элемент окажется меньше, то он становится меньшим}

      if A[i,j]<Min then

      begin

        min:=A[i,j];

        NumI:=I;

        NumJ:=J;

      end;

    {Найденный элемент из матрицы записывается в массив B и выводится на экран}

    B[i]:=A[NumI,NumJ];

    Write(B[I] ' ');

  end;

  Writeln;

  Readln

end. 
 

Задача  5

Дан текстовый  файл с именем NameT, содержащий таблицу из трех столбцов вещественных чисел. Ширина столбцов таблицы и способ их выравнивания являются произвольными. Специальных символов-разделителей таблица не содержит. Создать файлы вещественных чисел с именами Name1, Name2 и Name3, каждый из которых содержит числа из соответствующего столбца таблицы. Вычислить количество чисел, их сумму, среднее значение для каждого столбца.

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

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

Program N_5;

Const Nt='Namet.txt';

      N1='Name1.rl';

      N2='Name2.rl';

      N3='Name3.rl';

Var n,Count1,Count2,Count3,i,j:Integer;

    A,S1,S2,S3,Sr1,Sr2,Sr3:Real;

    NameT:text;

    Name1,Name2,Name3: file of real;

begin

  {Все исходные данные формируются случайным образом}

  Randomize;

  n:=random(1000)+1;

  Assign(NameT,Nt);

  Rewrite(NameT);

  {Формирование файла из трех столбцов}

  For i:=1 to (n div 3) do

  begin

    For j:=1 to 3 do

    begin

      A:=200-random*100;

      Write(NameT,A,' ');

    end;

    Writeln(NameT);

  end;

  {Запись в файл остальных из n чисел, не вошедших в предыдущем сеансе}

  if (n div 3*3)<n then

    For i:=n div 3*3 to n do

    begin

      A:=200-random*100;

      Write(NameT,A,' ');

    end;

  Close(NameT);

  assign(Name1,N1);

  Rewrite(Name1);

  assign(Name2,N2);

  Rewrite(Name2);

  assign(Name3,N3);

  Rewrite(Name3);

  i:=1;

  Count1:=0; Count2:=0; Count3:=0;

  S1:=0; S2:=0; S3:=0;

  Reset(NameT);

  While Not Eof(NameT) do

  begin

    Read(NameT,A);

    case (i mod 3) of

      1: begin

           Write(Name1,A);

           Inc(Count1);

           S1:=S1+A;

           Inc(i);

         end;

      2: begin

           Write(Name2,A);

           Inc(Count2);

           S2:=S2+A;

           Inc(i);

         end;

      0: begin

           Write(Name3,A);

           Inc(Count3);

           S3:=S3+A;

           Inc(i);

         end;

    end;

  end;

  Close(NameT);

  Close(Name1);

  Close(Name2);

  Close(Name3);

  Sr1:=S1/Count1;

  Sr2:=S2/Count2;

  Sr3:=S3/Count3;

  Writeln('1. Count = ',Count1,' ','S = ',S1:0:4,' ','Sr = ',Sr1:0:4);

  Writeln('2. Count = ',Count2,' ','S = ',S2:0:4,' ','Sr = ',Sr2:0:4);

  Writeln('3. Count = ',Count3,' ','S = ',S3:0:4,' ','Sr = ',Sr3:0:4);

  Readln;

end. 
 

Задача  6

Дано четное число  n>2, проверить для этого числа гипотезу Гольдбаха. Эта гипотеза заключается в том, что каждое четное n, большее двух, представляется в виде суммы двух простых чисел. (Определить процедуру, позволяющую распознавать простые числа).

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

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

Program N_6;

var n,a,b:Word; 

{Проверка числа,  простое ли оно. Если простое,  то false, иначе - true}

Function Verify(m:Word):Boolean;

var i:word;

    Rez:Boolean;

begin

{Пропускаем из  проверки все четные, кроме 2}

 if (m=1) or ((m<>2) and not odd(m)) then Rez:=True else

   {Пропускаем 2 и 3 - они простые}

   if (m=2) or (m=3) then Rez:=False else

   begin

     {Проверяем делимость остальных чисел на все натуральные от 2 до половины m}

     For i:=2 to (m div 2) do

     begin

      {Если число m делится на текущее натуральное прекращаем проверку}

      Rez:=m mod i=0;

      if rez then break;

     end;

   end;

Verify:=Rez;

end; 

{Процедура, подбирающая  простые а и b, сумма которых  равна n}

Procedure Goldbah(n:Word);

var i,j:Word;

begin

  For i:=2 to n-1 do

  begin

    a:=i;

    if Not Verify(a) then

    begin

      if Not Verify(n-a) then

      begin

        b:=n-a;

        Writeln(a, ' + ',b,' = ',n);

      end;

    end;

  end;

end; 

begin

  Write('n = '); Readln(n);

  Unil n mod 2=0;

  Goldbah(n);

  Readln

end. 

Задача 7

Вычислить бесконечную  сумму с заданной точностью e (e>0 и может быть 0,1; 0,01; 0,001 и т. д.). Считать, что требуемая точность достигнута, если вычислена сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше, чем e, - это и все оследующие слагаемые можно не учитывать.

Даны действительные числа x, e (x¹0, e>0) и целые числа k и n. Вычислить сточностью e

.

Некоторые размышления  к задаче:

Очевидно, что если |x|<1, то модуль каждого следующего слагаемого будет ворастать, и задача решена быть не может, т. к. некоторое (возможно, первое) слагаемое будет больше 1, что не соответствует условию задачи. Поэтому значение x по модулю должно быть больше 1.

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

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

Program N_7;

Var Eps, x,S,a,d:Real;

    k,n:Word; 

begin

  Write('Epsilon = '); Readln(Eps);

  Repeat

    Write('x = '); Readln(x);

    if x<=1 then Writeln('Error: x>1');

  until x>1;

  Write('n = '); Readln(n);

  S:=0;

  if n mod 2<>0

  then a:=-5/Exp(4*ln(x))

  else a:=5/Exp(4*ln(x));

  k:=2;

  d:=(4*k+5)*(2*k-1)/Exp(4*ln(x))/(2*k+1)/(4*k+1);

  while Abs(a*d)>=Eps do

  begin

    S:=S+a;

    a:=a*d;

    k:=k+1;

    d:=(4*k+5)*(2*k-1)/Exp(4*ln(x))/(2*k+1)/(4*k+1);

  end;

  Writeln('S = ',S:0:7);

  Readln;

end. 
 
 

 

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