|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
09.05.2012, 12:42 | #1 (permalink) |
Member
Регистрация: 27.11.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Массив, файлы, подпрограммы. Pascal
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; |
09.05.2012, 12:42 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Дам вам ссылки на темы которые схожи с вашей Pascal. Динамический массив Делфи: массив, файлы Массив Pascal |
09.05.2012, 12:53 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
type matr=array[1..nmax,1..nmax] of integer; Что касается процедуры, то там какая-то жуть несусветная. Сейчас попробую привести в божеский вид. |
|
09.05.2012, 13:19 | #3 (permalink) |
Специалист
Регистрация: 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. |
09.05.2012, 14:01 | #4 (permalink) | |
Member
Регистрация: 27.11.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
|
|
09.05.2012, 14:18 | #5 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Суть вот в чем. Внутри процедуры мы вводим вспомогательный массив ХХ того же типа, что и входной (и выходной) массивы X1s и X2s. В начале процедуры мы копируем в этот ХХ входной массив X1s (тут Вы абсолютно правы), а потом начинаем этот самый ХХ всяко-разно курочить, в данном случае, заменять в нем диагональ. А уже преобразовав его к нужному виду, мы копируем его в выходной массив X2s. Возникает вопрос: можно ли обойтись без вспомогательного массива и работать непосредственно с выходным? А пёс его знает, может быть и можно, просто я нарывался на глюки некоторых трансляторов, и во избежание предпочитаю работать со вспомогательными параметрами, а выходным присваивать значения только в самом конце. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
09.05.2012, 14:31 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да, я немного поторопился и счел, что константа nmax это просто размерность матрицы. Если же это максимально допустимое значение, то еще в программу надо добавить ввод рабочей размерности (N) и дальше всюду в программе (и процедуре) заменить nmax на N. Но это мелочь - сами справитесь.
|
09.05.2012, 16:25 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
А по методу пузырька - эссе накатал, где постарался объяснить как можно более доходчиво:
Об алгоритмах упорядочения одномерных массивов |
09.05.2012, 16:29 | #8 (permalink) | |
Member
Регистрация: 27.11.2011
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|