Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 09.05.2012, 12:42   #1 (permalink)
ayPinki
Member
 
Регистрация: 27.11.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Массив, файлы, подпрограммы. Pascal

1)Пeрeписать в файл по столбцам матрицу, у которой меньше положительных элементов в нижнем треугольнике(в случае равенства, переписать обе). - помогите с реализацией.в подпрограммах желательно

2)Упорядочить главную диагональ матрицы по возрастанию подпрограммой.(матрица- квадратная естестна)
(главное - вот так объявлены матрицы в основной программе, чтоб путаницы не было
const nmax=10;
type matr1=array[1..nmax,1..nmax] of integer;
type matr2=array[1..nmax,1..nmax] of integer;
var
x1,x2:matr1;
)


вот пытался сделать, но чот не пашет(

procedure Sort(var x:matr1;maxx:integer);
var
aa:array [1..nmax,1..nmax] of real;
k,a:integer;
temp:real;
begin
for k:=1 to nmax do begin
aa[k,k]:=x[k,k];

for i:=1 to (nmax-1) do
for j:=i+1 to (nmax) do
if a[i]>a[j] the begin
for k:=1 to nmax do begin

temp:=x[i,k];
x[i,k]:=x[j,k];
x[j,k]:=temp
end;
end;
end;
ayPinki вне форума   Ответить с цитированием

Старый 09.05.2012, 12:42
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Дам вам ссылки на темы которые схожи с вашей

Pascal. Динамический массив
Делфи: массив, файлы
Массив Pascal

Старый 09.05.2012, 12:53   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ayPinki Посмотреть сообщение
type matr1=array[1..nmax,1..nmax] of integer;
type matr2=array[1..nmax,1..nmax] of integer;
Ну что, право, за глупости - зачем вводить два абсолютно тождественных типа? Вполне достаточно
type matr=array[1..nmax,1..nmax] of integer;

Что касается процедуры, то там какая-то жуть несусветная. Сейчас попробую привести в божеский вид.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.05.2012, 13:19   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну вот Вам полное решение второй задачи:
Код:
const
 nmax=10;
type
 matr=array[1..nmax,1..nmax] of integer;
var
 x1,x2:matr;
 i,j:Integer;

procedure Sort(X1s:matr; var X2s:matr);
var
 k,m,temp:integer;
 XX:matr;
 z:array[1..nmax] of integer;
begin
 for k:=1 to nmax do
  z[k]:=X1s[k,k];

 for k:=1 to nmax do
  for m:=1 to nmax-k do
   if z[m]>z[m+1] then
    begin
     temp:=z[m];
     z[m]:=z[m+1];
     z[m+1]:=temp;
    end;

 XX:=X1s;

 for k:=1 to nmax do
  XX[k,k]:=z[k];

 X2s:=XX;
end;

begin
 Randomize;
 for i:=1 to nmax do
  begin
   for j:=1 to nmax do
    begin
     x1[i,j]:=50-Random(100);
     write(x1[i,j]:4);
    end;
   writeln;
  end;
 writeln;
 Sort(x1,x2);
 for i:=1 to nmax do
  begin
   for j:=1 to nmax do
    write(x2[i,j]:4);
   writeln;
  end;
 readln
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.05.2012, 14:01   #4 (permalink)
ayPinki
Member
 
Регистрация: 27.11.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Ну вот Вам полное решение второй задачи:
Код:
const
 nmax=10;
type
 matr=array[1..nmax,1..nmax] of integer;
var
 x1,x2:matr;
 i,j:Integer;

procedure Sort(X1s:matr; var X2s:matr);
var
 k,m,temp:integer;
 XX:matr;// - не пойму что это
 z:array[1..nmax] of integer;
begin
 for k:=1 to nmax do
  z[k]:=X1s[k,k];   //перезапись главной диагонали в дополнительную одномерную матрицу

 for k:=1 to nmax do
  for m:=1 to nmax-k do  // зачем от максимального значение кол-ва столбцов(основной матрицы)  отнимать размерность дополнительной матрицы? - зачем нам вложенный цикл. V ниже мы же оперируем только одномерной дополнительной матрицей.
   if z[m]>z[m+1] then 
    begin
     temp:=z[m]; 
     z[m]:=z[m+1];
     z[m+1]:=temp;
    end;

 XX:=X1s; // матрица хх становится копией Х1s?

 for k:=1 to nmax do //заменяем в главной диагонали 
  XX[k,k]:=z[k];

 X2s:=XX; //вот это не понятно
end;

begin
 Randomize;
 for i:=1 to nmax do
  begin
   for j:=1 to nmax do
    begin
     x1[i,j]:=50-Random(100);
     write(x1[i,j]:4);
    end;
   writeln;
  end;
 writeln;
 Sort(x1,x2);
 for i:=1 to nmax do
  begin
   for j:=1 to nmax do
    write(x2[i,j]:4);
   writeln;
  end;
 readln
end.
комментарии корректны? поясните пожалст.
ayPinki вне форума   Ответить с цитированием
Старый 09.05.2012, 14:18   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ayPinki Посмотреть сообщение
for k:=1 to nmax do
for m:=1 to nmax-k do // зачем от максимального значение кол-ва столбцов(основной матрицы) отнимать размерность дополнительной матрицы? - зачем нам вложенный цикл. V ниже мы же оперируем только одномерной дополнительной матрицей.
if z[m]>z[m+1] then
begin
temp:=z[m];
z[m]:=z[m+1];
z[m+1]:=temp;
end;
Всё это вместе - реализация упорядочения одномерного массива так называемым "методом пузырька". Попробуйте разобраться в нем самостоятельно: представьте себе наглядно всю процедуру.
Цитата:
Сообщение от ayPinki Посмотреть сообщение
X2s:=XX; //вот это не понятно
Суть вот в чем.
Внутри процедуры мы вводим вспомогательный массив ХХ того же типа, что и входной (и выходной) массивы X1s и X2s. В начале процедуры мы копируем в этот ХХ входной массив X1s (тут Вы абсолютно правы), а потом начинаем этот самый ХХ всяко-разно курочить, в данном случае, заменять в нем диагональ. А уже преобразовав его к нужному виду, мы копируем его в выходной массив X2s. Возникает вопрос: можно ли обойтись без вспомогательного массива и работать непосредственно с выходным? А пёс его знает, может быть и можно, просто я нарывался на глюки некоторых трансляторов, и во избежание предпочитаю работать со вспомогательными параметрами, а выходным присваивать значения только в самом конце.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 09.05.2012, 14:31   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ayPinki Посмотреть сообщение
зачем от максимального значение кол-ва столбцов(основной матрицы) отнимать размерность дополнительной матрицы?
Да, я немного поторопился и счел, что константа nmax это просто размерность матрицы. Если же это максимально допустимое значение, то еще в программу надо добавить ввод рабочей размерности (N) и дальше всюду в программе (и процедуре) заменить nmax на N. Но это мелочь - сами справитесь.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.05.2012, 16:25   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

А по методу пузырька - эссе накатал, где постарался объяснить как можно более доходчиво:
Об алгоритмах упорядочения одномерных массивов
Vladimir_S вне форума   Ответить с цитированием
Старый 09.05.2012, 16:29   #8 (permalink)
ayPinki
Member
 
Регистрация: 27.11.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
А по методу пузырька - эссе накатал, где постарался объяснить как можно более доходчиво:
Об алгоритмах упорядочения одномерных массивов
спасибо вам, читкану)
ayPinki вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.