Часовой пояс: UTC + 3 часа




Куратор(ы):   Lord_of_Darkness   



Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 40 из 50<  1 ... 37  38  39  40  41  42  43 ... 50  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 
Прилепленное (важное) сообщение

Убедительная просьба ко всем, кто выкладывает исходники:
1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы

Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!

Прежде чем задать вопрос, воспользуйтесь учебником


Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь

Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36



Партнер
 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Код:
inc(k);
можно заменить на
Код:
k := k + 1;
это равнозначные записи, просто первая компактней.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 24.04.2008
Здравствуйте! В заранее благодарен за помощь

дана задачка:
Код:
Дана матрица Y(к,к). Сформировать вектор, содержащий диагональные элементы матрицы Y. Отсортировать его  в порядке убывания элементов.

нужно к завтрашнему дню ее решить...

вообщем задачу нужно решить используя процедуру так вот в я не знаю что вынести в процедуру?

и еще вопрос у меня есть наброски кода для формирование вектора с диагональными элементами матрицы (k,k) но почемуто мне кажется что я уж очень не универсально ее решил :roll: приведите примеры пожалуйста как можно это сделать? :weep:


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
SKY-LOST
если нужны элементы главной диагонали, то
Код:
for i:=1 to k do
  vec[i] := Y[i,i]

если побочной, то
Код:
for i:=1 to k do
  vec[i] := Y[i,k-i+1]


в процедуру тут логично вынести сортировку полученного вектора. Алгоритмов сортировки много - к примеру, метод пузырька. Код тоже легко найти.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
SKY-LOST писал(а):
я не знаю что вынести в процедуру?
Сортировку, например :). Хотя это по вкусу.
SKY-LOST писал(а):
у меня есть наброски кода
Дык никто не мешает выложить.

Код:
for i:=1 to k do
   X[i]:=Y[i,i]


Дуплет, однако :).


 

Member
Статус: Не в сети
Регистрация: 24.04.2008
maco писал(а):
SKY-LOST писал(а):
я не знаю что вынести в процедуру?
Сортировку, например :). Хотя это по вкусу.
SKY-LOST писал(а):
у меня есть наброски кода
Дык никто не мешает выложить.

Код:
for i:=1 to k do
   X[i]:=Y[i,i]


Дуплет, однако :).

да для одной диагонали почти такой-же код, малец я там лишнего немного приписал)))

а вот для второй диагонали как так мыслю:
Код:
j:=k
for i:=1 to k {k - размерность матрицы}
begin
mat[t]:=matr[i,j];  {t - переменная которая накапливает количество элементов
записанных в вектор}
inc(t);
j:=j-1
end;


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
SKY-LOST писал(а):
а вот для второй диагонали как так мыслю
См. выше у Lord_of_Darkness :).


 

Member
Статус: Не в сети
Регистрация: 24.04.2008
maco писал(а):
SKY-LOST писал(а):
а вот для второй диагонали как так мыслю
См. выше у Lord_of_Darkness :).

да я видел я просто отписал как я думаю...

спасибо вам обоим за помощь!!!


 

Member
Статус: Не в сети
Регистрация: 24.04.2008
Вот еще вчера написал код:
Код:
program laba_11;
uses crt;
      type mat=array[1..10,1..10] of integer;
      vek=array[1..20] of integer;
      var max,i,j,r,s:integer;
      mt:mat;
      vk:vek;
      vk_srt:vek;
      procedure sortirovka (r_proc:integer; vk_proc:vek);
      var z,x,c:byte;
      begin
         for z:=2 to r_proc*2 do
          for x:=r_proc*2 downto z do
            if vk_proc[z-1]>vk_proc[x] then
               begin
                 c:=vk_proc[x-1];
                 vk_proc[x-1]:=vk_proc[x];
                 vk_proc[x]:=c
               end;
      writeln;
      writeln;
      writeln ('vuvod sortirovannogo vektora: ');
      writeln;
      for z:=1 to r_proc*2 do
         write (vk_proc[z]:3)
      end;

begin
clrscr;
randomize;
     writeln ('vvod razmernosti matrizy: ');
     read (r);
     writeln;
     writeln ('isxodnay matriza:');
     writeln;
     for i:=1 to r do
        begin
           for j:=1 to r do
              begin
                 mt[i,j]:=random(100);
                 write (mt[i,j]:3)
              end;
              writeln;
        end;


     s:=1;
     for i:=1 to r do
        begin
           vk[s]:=mt[i,i];
           inc(s);
        end;
     for i:=1 to r do
        begin
           vk[s]:=mt[i,r-i+1];
           inc(s)
        end;

     writeln;
     writeln ('vuvod vektora: ');
     writeln;
     for i:=1 to r*2 do
        write (vk[i]:3);

     sortirovka (r,vk);

     readkey
end.

но чтото сортировка шалит не как немогу понять почему :weep: подскажите?

а еще был такой вариант кода что Отсортированный массив выводился в программу и в самой программе организовывал ему вывод но вот досада он выводит все нули тогда :weep: если нетрудно просто скажите в чем загвоздка мне самом очень интересно !!!
Зы: в пошаговом режиме он не показывает в процедуре :weep:
код:
Код:
program laba_11;
uses crt;
      type mat=array[1..10,1..10] of integer;
      vek=array[1..20] of integer;
      var max,i,j,r,s:integer;
      mt:mat;
      vk:vek;
      vk_srt:vek;
      procedure sortirovka (r_proc:integer; vk_proc:vek; var vk_sort:vek);
      var z,x,c:byte;
      begin
         for z:=2 to r_proc*2 do
          for x:=r_proc*2 downto z do
            if vk_proc[z-1]>vk_proc[x] then
               begin
                 c:=vk_proc[x-1];
                 vk_proc[x-1]:=vk_proc[x];
                 vk_proc[x]:=c;

         for z:=1 to r_proc*2 do
            vk_proc[z]:=vk_sort[z]
               end;
      end;

begin
clrscr;
randomize;
     writeln ('vvod razmernosti matrizy: ');
     read (r);
     writeln;
     writeln ('isxodnay matriza:');
     writeln;
     for i:=1 to r do
        begin
           for j:=1 to r do
              begin
                 mt[i,j]:=random(100);
                 write (mt[i,j]:3)
              end;
              writeln;
        end;


     s:=1;
     for i:=1 to r do
        begin
           vk[s]:=mt[i,i];
           inc(s);
        end;
     for i:=1 to r do
        begin
           vk[s]:=mt[i,r-i+1];
           inc(s)
        end;

     writeln;
     writeln ('vuvod vektora: ');
     writeln;
     for i:=1 to r*2 do
        write (vk[i]:3);

     writeln;
     writeln;
     writeln ('vuvod sortirovannogo vektora: ');
     writeln;


     sortirovka (r,vk,vk_srt);

     for i:=1 to r*2 do
       write (vk_srt[i]:3);
       readkey
       end.


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
SKY-LOST
чему тут удивляться? Он Вам ничего не отсортирует, потому как без явного указания var передаваемые функциям/процедурам структуры будут считаться константами. Передавайте сам вектор с указанием var, не надо передавать два вектора.

сортировка вообще может выглядеть так, например :
Код:
procedure sort(array_size : integer; var vec : array [1..array_size] of integer);
var
  tmp, i : integer;
  flag : boolean;
begin

flag := true;
while flag do
begin
  flag := false;
  for i:= 2 to array_size do
    if vec[i-1] > vec[i] then
    begin
       tmp := vec[i-1];
       vec[i-1] := vec[i];
       vec[i] := tmp;
       flag := true;
    end;
end;

end;


суть проста - переставляем соседние элементы, если предыдущий больше последующего до тех пор, пока при полном проходе по массиву не будет ни одной перестановки.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 24.04.2008
Lord_of_Darkness писал(а):
SKY-LOST
чему тут удивляться? Он Вам ничего не отсортирует, потому как без явного указания var передаваемые функциям/процедурам структуры будут считаться константами. Передавайте сам вектор с указанием var, не надо передавать два вектора.

сортировка вообще может выглядеть так, например :
Код:
procedure sort(array_size : integer; var vec : array [1..array_size] of integer);
var
  tmp, i : integer;
  flag : boolean;
begin

flag := true;
while flag do
begin
  flag := false;
  for i:= 2 to array_size do
    if vec[i-1] > vec[i] then
    begin
       tmp := vec[i-1];
       vec[i-1] := vec[i];
       vec[i] := tmp;
       flag := true;
    end;
end;

end;


суть проста - переставляем соседние элементы, если предыдущий больше последующего до тех пор, пока при полном проходе по массиву не будет ни одной перестановки.

потправил все но что он ругается и не пойму что не так :weep:
вот ссылка на скриншот http://pic.ipicture.ru/uploads/090421/4KCXfjeuva.jpg


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
SKY-LOST
Определите тип аля array [1..array_size] of integer и воспользуйтесь в процедуре именем типа :).


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
my bad, вместо array [1..array_size] of integer пишите свой тип.
Только пара правок
1. типы принято обозначать начиная с буквы T, т.е. тип будет не vek, а TVek
2. неплохо бы обратить внимание на форматирование кода

Код:
program laba_11;
uses crt;

type
  TMat = array [1..10, 1..10] of integer;
  TVek = array[1..20] of integer;
var
  max, i, j, r, s : integer;
  mt : TMat;
  vk : TVek;

procedure sort(array_size : integer; var vec : TVec);
var
  tmp, i : integer;
  flag : boolean;
begin
  flag := true;
  while flag do
  begin
    flag := false;
    for i:= 2 to array_size do
      if vec[i-1] > vec[i] then
      begin
         tmp := vec[i-1];
         vec[i-1] := vec[i];
         vec[i] := tmp;
         flag := true;
      end; //  if vec[i-1] > vec[i] then
  end; //   while flag do
end;

begin
  // выдераем диагонали
  sort(20,vk);

end.


приятнее выглядит, правда?

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


Последний раз редактировалось Lord_of_Darkness 21.04.2009 21:30, всего редактировалось 2 раз(а).

 

Member
Статус: Не в сети
Регистрация: 24.04.2008
maco писал(а):
SKY-LOST
Определите тип аля array [1..array_size] of integer и воспользуйтесь в процедуре именем типа :).

так у меня же сразу вроде так было ? :oops:

кстате вот получилось! код:
Код:
program laba_11;
uses crt;
      type mat=array[1..10,1..10] of integer;
      vek=array[1..20] of integer;
      var max,i,j,r,s:integer;
      mt:mat;
      vk:vek;
      procedure sortirovka (var r_proc:integer; vk_proc:array[1..r_proc*2] of integer);
      var tmp, i:integer;
      flag:boolean;
      begin
         flag:=true;
         while flag do
           begin
             flag:=false;
             for i:=2 to r_proc*2 do
             if vk_proc[i-1] > vk_proc[i] then
             begin
                tmp:=vk_proc[i-1];
                vk_proc[i-1]:=vk_proc[i];
                vk_proc[i]:=tmp;
                flag:=true;
             end;
           end;
      end;

begin
clrscr;
randomize;
     writeln ('vvod razmernosti matrizy: ');
     read (r);
     writeln;
     writeln ('isxodnay matriza:');
     writeln;
     for i:=1 to r do
        begin
           for j:=1 to r do
              begin
                 mt[i,j]:=random(100);
                 write (mt[i,j]:3)
              end;
              writeln;
        end;


     s:=1;
     for i:=1 to r do
        begin
           vk[s]:=mt[i,i];
           inc(s);
        end;
     for i:=1 to r do
        begin
           vk[s]:=mt[i,r-i+1];
           inc(s)
        end;

     writeln;
     writeln ('vuvod vektora: ');
     writeln;
     for i:=1 to r*2 do
        write (vk[i]:3);

     writeln;
     writeln;
     writeln ('vuvod sortirovannogo vektora: ');
     writeln;


     sortirovka (r,vk);

     for i:=1 to r*2 do
       write (vk[i]:3);
       readkey
       end.


но вот сортирует он чегото как-то не так ссылка на скрин: http://pic.ipicture.ru/uploads/090421/A7v5pqUpL3.jpg
а вообще мне надо отсортировать вектор в порядке убывания элементов...

я вам обоим очень благодарен за то что вы мне оказываете помощь!


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


Последний раз редактировалось Lord_of_Darkness 21.04.2009 21:33, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 04.10.2004
SKY-LOST писал(а):
так у меня же сразу вроде так было ?
Дык и пользовались бы :).
SKY-LOST писал(а):
procedure sortirovka (var r_proc:integer; vk_proc:array[1..r_proc*2] of integer);
У вас var не там стоит :).


 

Member
Статус: Не в сети
Регистрация: 24.04.2008
maco писал(а):
SKY-LOST писал(а):
так у меня же сразу вроде так было ?
Дык и пользовались бы :).
SKY-LOST писал(а):
procedure sortirovka (var r_proc:integer; vk_proc:array[1..r_proc*2] of integer);
У вас var не там стоит :).

var стоит там потомучто мне нужно чтобы r_proc в цикле мог изменяться так как его нужно умножить на 2 а на сколько я понял если он будет написан без var то это будет константа

я могу ошибаться


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
SKY-LOST
тьфу, что Вы меня путаете? Все там правильно, var перед массивом поставьте, а перед рпроц не надо, оно и так умножится.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 24.04.2008
Lord_of_Darkness писал(а):
ну да, конечно, потому что должно быть while not flag

добавил но все равно вектор сортируется как неправильно :weep:


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
см. выше - not не надо. Сами же про константы говорили - передаете вектор в процедуру как константу и хотите, чтобы он отсортировался, т.е. изменился. Нонсенс?

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 24.04.2008
Lord_of_Darkness писал(а):
см. выше - not не надо. Сами же про константы говорили - передаете вектор в процедуру как константу и хотите, чтобы он отсортировался, т.е. изменился. Нонсенс?

получается что в формальных параметрах для каждый переменной нужно отдельно добавлять var чтобы оно не передалось как константа в процедуру?
это я так на будущее спрашиваю!

кстате переставил var и вектор правильно отсортировался, вот только теперь надо его отсортировать в порядке убывания элементов, существенно ли придется менять логику сортировки?


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 40 из 50<  1 ... 37  38  39  40  41  42  43 ... 50  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan