Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Паскаль. Двумерный массив (http://www.tehnari.ru/f43/t246147/)

Viktoar1997 07.05.2016 17:57

Паскаль. Двумерный массив
 
1. Сформировать двумерный целочисленный массив W(3*13) используя генератор случайных чисел на интервале (-7,10).
2. Преобразовать массив W в одномерный массив T. Полученный массив вывести на экран.
3. Вычислить среднегеометрическое значение нечетных по номеру элементов первой трети массива T.
4. Определить значение, по модулю самое близкое к заданному числу С среди отрицательных элементов второй трети массива T.
5. Упорядочить положительные элементы массива T по убыванию противоположных значений.

Евгений 07.05.2016 21:10

Динамическое в простое переделайте сами.
Код:

uses  Crt;
const n=3; m=13;
type  Tmass=array[1..40] of integer;
      Pmass=^Tmass;
      Pmatr=array[1..40] of Pmass;
var  W:Pmatr;
      T:Pmass;
      i,j,k,pr,c:integer;
begin
      ClrScr;
      for i:=1 to n do
        GetMem(W[i],m*SizeOf(integer));
        GetMem(T,(n*m)*SizeOf(integer));
          Writeln('Massiv:');
          Writeln;
            Randomize;
      k:=0;
        for i:=1 to n do
        for j:=1 to m do
          begin
            W[i]^[j]:=Random(18)-7;
            Inc(k);
            T^[k]:=W[i]^[j];
            Write(T^[k]:4);
          end;
        Writeln;
          Writeln;
      for i:=1 to n do
        FreeMem(W[i],m*SizeOf(integer));
      pr:=1; j:=0;
      for i:=1 to (k div 3) do
        if i mod 2<>0 then
        begin
          Inc(j);
          pr:=pr*Abs(T^[i]);
        end;
      Writeln('Srednee geometriceskoe = ',(exp(ln(pr)/j)):3:2);
        Write('Cislo ot 0 do 10 = ');
        Readln(c);
          pr:=100; j:=0;
      for i:=(k div 3) to k do
        if T^[i]<0
        then
          if Abs(T^[i])=c
          then
            begin
              j:=i;
              Break
            end
          else
            begin
              if Abs(T^[i])>c
              then
                if (Abs(T^[i])-c)<pr
                then
                  begin
                    pr:=(Abs(T^[i])-c);
                    j:=i;
                  end;
              if Abs(T^[i])<c
              then
                if (c-Abs(T^[i]))<pr
                then
                  begin
                    pr:=(c-Abs(T^[i]));
                    j:=i;
                  end;
            end;
      Writeln('Blizhayshee = ',T^[j]);
      FreeMem(T,(n*m)*SizeOf(integer));
    ReadKey;
end.


Viktoar1997 07.05.2016 21:47

Как -то не понятно, как Вы нашли среднегеометрическое.
и 5 нет:(

Но все же спасибо)

Евгений 07.05.2016 22:01

Вложений: 1
5. Не совсем понятно, что значит "по убыванию противоположных значений".

Среднее геометрическое:

Viktoar1997 07.05.2016 22:03

должно получится так же?

exp(1/n*ln(xn)) или как ?

Viktoar1997 07.05.2016 22:06

У меня 1,2,4 получилось, а 3 и 5 не получается

Евгений 07.05.2016 22:07

exp(1/n*ln(xn))=exp(ln(xn)/n)

Viktoar1997 07.05.2016 22:09

в 5 надо положительные по возрастанию , т.е я делаю пузырьковым методом ,а отрицательные не знаю как убрать

Viktoar1997 07.05.2016 22:11

За формулу спасибо)
не подскажите как n и xn написать?

Евгений 07.05.2016 22:52

С сортировкой получилось так:
Код:

uses  Crt;
const n=3; m=13;
type  Tmass=array[1..40] of integer;
      Pmass=^Tmass;
      Pmatr=array[1..40] of Pmass;
var  W:Pmatr;
      T:Pmass;
      i,j,k,pr,c:integer;
begin
      ClrScr;
      for i:=1 to n do
        GetMem(W[i],m*SizeOf(integer));
        GetMem(T,(n*m)*SizeOf(integer));
          Writeln('Massiv:');
          Writeln;
            Randomize;
      k:=0;
        for i:=1 to n do
        for j:=1 to m do
          begin
            W[i]^[j]:=Random(18)-7;
            Inc(k);
            T^[k]:=W[i]^[j];
            Write(T^[k]:4);
          end;
        Writeln;
          Writeln;
      for i:=1 to n do
        FreeMem(W[i],m*SizeOf(integer));
      pr:=1; j:=0;
      for i:=1 to (k div 3) do
        if i mod 2<>0 then
        begin
          Inc(j);
          pr:=pr*Abs(T^[i]);
        end;
      Writeln('Srednee geometriceskoe = ',(exp(ln(pr)/j)):3:2);
        Write('Cislo ot 0 do 10 = ');
        Readln(c);
          pr:=100; j:=0;
      for i:=(k div 3) to k do
        if T^[i]<0
        then
          if Abs(T^[i])=c
          then
            begin
              j:=i;
              Break
            end
          else
            begin
              if Abs(T^[i])>c
              then
                if (Abs(T^[i])-c)<pr
                then
                  begin
                    pr:=(Abs(T^[i])-c);
                    j:=i;
                  end;
              if Abs(T^[i])<c
              then
                if (c-Abs(T^[i]))<pr
                then
                  begin
                    pr:=(c-Abs(T^[i]));
                    j:=i;
                  end;
            end;
      Writeln('Blizhayshee = ',T^[j]);
      i:=2;
      repeat
        if T^[i]<0
          then
          begin
            pr:=T^[i];
            for j:=i downto 2 do
              begin
                T^[j]:=T^[j-1];
                T^[1]:=pr;
              end
          end
        else
          Inc(i);
      until i>k;
      i:=1;
      While T^[i]<0 do Inc(i);
      for c:=i to k-1 do
        for j:=i to k-1 do
        if T^[j]<T^[j+1]
          then
          begin
            pr:=T^[j];
            T^[j]:=T^[j+1];
            T^[j+1]:=pr;
          end;
      Writeln;
      Writeln('Sortirovanniy:');
        Writeln;
      for i:=1 to k do
      Write(T^[i]:4);
        Writeln;
      FreeMem(T,(n*m)*SizeOf(integer));
    ReadKey;
end.



Часовой пояс GMT +4, время: 07:17.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.