• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль. Двумерный массив

Viktoar1997

Новые
Регистрация
7 Май 2016
Сообщения
12
Реакции
0
Баллы
0
Паскаль. Двумерный массив

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

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

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

Вложения

  • 741.webp
    741.webp
    1.9 KB · Просмотры: 68
должно получится так же?

exp(1/n*ln(xn)) или как ?
 
У меня 1,2,4 получилось, а 3 и 5 не получается
 
в 5 надо положительные по возрастанию , т.е я делаю пузырьковым методом ,а отрицательные не знаю как убрать
 
За формулу спасибо)
не подскажите как n и xn написать?
 
С сортировкой получилось так:
Код:
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.
 
я написал ,но у меня почему-то в 3 (ошибка с плавающей запятой),а в 5 упорядочил все и как убрать отрицательные не знаю.
Program ss;
uses Crt;
const n=3; m=13;
var
W:array[1..n,1..m] of integer;
T:array[1..n,1..m] of integer;
i,j,A,B,l,c,r,min,ind,x,q:integer; k,Sg:real;
begin
Clrscr;
randomize;
writeln('#1.');
for i:=1 to n do begin
for j:=1 to m do begin
W[i,j]:=-7+random(18);
write(W[i,j]:4);
end; writeln; end; writeln; writeln('#2');
A:=0;
for i:=1 to n do
for j:=1 to m do begin
A:=A+1;
T[A]:=W[i,j];
write(T[A]:4);
end; writeln ;writeln;
writeln('#3');
for i:=1 to (39 div 3) do
if T mod <>0 then
if T<>0 then begin
k:=k+1*T;
l:=l+1;
end;
else B:=1;
if B=0 then begin
Sg:=exp(ln(k)/l);
writeln(Sg:0:2);
end
else writeln ('Ошибка');
writeln;
writeln('#4');
readln(c); r:=A div 3 ;
min:=18;
ind:=2;
for i:=2*r to A do
if (T<0)and(min>abs(c-T)) then begin
min:=abs(c-T);
ind:=i;
end;
writeln('bliz chislo ');
writeln;writeln;
write('#5');
for i:=1 to n*m-1 do
for j:=1 to n*m-1 do
if (T[j]>T[j+1]) then begin
q:=T[j];
T[j]:=T[j+1];
T[j+1]:=q;
end;
for i:=1 to n*m do
write(T:4);
readkey;
end.


Посмотрите,если не сложно)
 
2. Преобразовать массив W в одномерный массив T. Полученный массив вывести на экран.
А у Вас и W и Т матрици
Я же Вам написал вариант. Там всё работает.
 
А почему в 3 всегда целое число получается?
 
В онлайн решениях проверяю всегда другое среднегеометрическое получается
 
Inc(x) это x:=x+1;
В 3 получается вещественное.

Код:
uses  Crt;
const n=3; m=13;
type  Tmass=array[1..(n*m)] of integer;
      Tmatr=array[1..n,1..m] of integer;
var   W:Tmatr;
      T:Tmass;
      i,j,k,pr,c:integer;
begin
      ClrScr;
       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;
       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:=k-1;
       repeat
         if T[i]>0
          then
           begin
             pr:=T[i];
             for j:=i to k-1 do
              T[j]:=T[j+1];
             T[k]:=pr;
             Dec(i);
           end
         else
          Dec(i);
       until i=1;
      for i:=k-1 downto 1 do
       if T[i]>-1
        then
         begin
           pr:=T[i];
           for j:=i to k-1 do
            t[j]:=T[j+1];
           T[k]:=pr;
         end;
      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;
     ReadKey;
end.
 
5 получается,а в 3б например: если должно быть 1.7 , там др число получается
 
У Вас задание:
"Вычислить среднегеометрическое значение нечетных по номеру элементов первой трети массива T."
Из этого следует, что из первой трети массива нужно взять элементы:
T[1], T[3], T[5], T[7], T[9], T[11], T[13], всего их будет 7.

Чтобы найти среднее геометрическое, нужно перемножить все числа и извлечь из них корень. Степень корня определяется количеством чисел.
 
Назад
Сверху