Убедительная просьба ко всем, кто выкладывает исходники: 1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы
Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!
Прежде чем задать вопрос, воспользуйтесь учебником
Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36
Дана матрица Y(к,к). Сформировать вектор, содержащий диагональные элементы матрицы Y. Отсортировать его в порядке убывания элементов.
нужно к завтрашнему дню ее решить...
вообщем задачу нужно решить используя процедуру так вот в я не знаю что вынести в процедуру?
и еще вопрос у меня есть наброски кода для формирование вектора с диагональными элементами матрицы (k,k) но почемуто мне кажется что я уж очень не универсально ее решил приведите примеры пожалуйста как можно это сделать?
да для одной диагонали почти такой-же код, малец я там лишнего немного приписал)))
а вот для второй диагонали как так мыслю:
Код:
j:=k for i:=1 to k {k - размерность матрицы} begin mat[t]:=matr[i,j]; {t - переменная которая накапливает количество элементов записанных в вектор} inc(t); j:=j-1 end;
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.
но чтото сортировка шалит не как немогу понять почему подскажите?
а еще был такой вариант кода что Отсортированный массив выводился в программу и в самой программе организовывал ему вывод но вот досада он выводит все нули тогда если нетрудно просто скажите в чем загвоздка мне самом очень интересно !!! Зы: в пошаговом режиме он не показывает в процедуре код:
Код:
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);
Куратор темы Статус: Не в сети Регистрация: 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)
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;
суть проста - переставляем соседние элементы, если предыдущий больше последующего до тех пор, пока при полном проходе по массиву не будет ни одной перестановки.
Куратор темы Статус: Не в сети Регистрация: 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 раз(а).
SKY-LOST Определите тип аля array [1..array_size] of integer и воспользуйтесь в процедуре именем типа .
так у меня же сразу вроде так было ?
кстате вот получилось! код:
Код:
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);
procedure sortirovka (var r_proc:integer; vk_proc:array[1..r_proc*2] of integer);
У вас var не там стоит .
var стоит там потомучто мне нужно чтобы r_proc в цикле мог изменяться так как его нужно умножить на 2 а на сколько я понял если он будет написан без var то это будет константа
Куратор темы Статус: Не в сети Регистрация: 03.01.2004 Откуда: Питер
см. выше - not не надо. Сами же про константы говорили - передаете вектор в процедуру как константу и хотите, чтобы он отсортировался, т.е. изменился. Нонсенс?
_________________ Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)
см. выше - not не надо. Сами же про константы говорили - передаете вектор в процедуру как константу и хотите, чтобы он отсортировался, т.е. изменился. Нонсенс?
получается что в формальных параметрах для каждый переменной нужно отдельно добавлять var чтобы оно не передалось как константа в процедуру?
это я так на будущее спрашиваю!
кстате переставил var и вектор правильно отсортировался, вот только теперь надо его отсортировать в порядке убывания элементов, существенно ли придется менять логику сортировки?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения