IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Процедура сортировки
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Нужно написать процедуру, которая упорядочивает по возрастанию (обменом) 1 строку в массиве 10х10. В самой программе с помощью этой процедуры упорядочить все строки.
По всякому пытался делать, но правильно работать никак не хочет. Помогите, пожалуйста, исправить ошибки.


Прикрепленные файлы
Прикрепленный файл  pas.rar ( 614 байт ) Кол-во скачиваний: 91
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


PROGRAM prog2;
TYPE
arr1=array[1..10,1..10] of integer;
VAR
i,j,k :integer;
A,a1 :arr1;
Fin, Fout :text;
PROCEDURE poryadok(k: integer; var a1: arr1);
var T,j,i:integer;
begin
for i:=2 to 10 do {значение k у тебя передается из программы}
{так что здесь изменять его не следует, воспользуйся лучше переменной i}
for j:=10 downto i do
if a1[k,j-1] > a1[k,j] then {сортировка у меня выглядит чуть-чуть по-другому}
begin
T:=a1[k,j-1];
a1[k,j-1]:=a1[k,j];
a1[k,j]:=T;
end;
end;

BEGIN
assign(Fout,'res2.txt');
rewrite(Fout);
assign(Fin,'dat2.txt');
reset(Fin);
for i:=1 to 10 do
for j:=1 to 10 do
begin
read(Fin,A[i,j]);
end;
close(Fin);
for k:=1 to 10 do
begin
poryadok(k, A);
end;
for i:=1 to 10 do
begin
for j:=1 to 10 do
begin
write(Fout,A[i,j]);
end;
writeln(Fout);
end;
close(Fout);
END.



Вроде все работает правильно..

Сообщение отредактировано: Айра -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Оля, смотри:
Цитата
{значение k у тебя передается из программы, так что здесь изменять его не следует, воспользуйся лучше переменной i}
Во-первых, даже если ты его и изменишь, ничего страшного не будет - изменения не передаются в вызывающую программу, а вообще если ты не хочешь чтобы пользователь что-то менял -

PROCEDURE poryadok(CONST k: integer; var a1: arr1); { <--- Пускай попробует теперь изменить }
smile.gif

Но и это не главное... Главное - то, что процедура может быть проще:

TYPE
vector = array[1 .. 10] of integer;
arr1 = array[1 .. 10] of vector;
...
PROCEDURE poryadok(var a1: vector);
var T, j, i: integer;
begin
for i:=2 to 10 do
for j:=10 downto i do
if a1[j-1] > a1[j] then begin {сортировка у меня выглядит чуть-чуть по-другому}
T:=a1[j-1]; a1[j-1]:=a1[j]; a1[j]:=T;
end;
end;

{ и вызов: }
...
for k:=1 to 10 do
poryadok(A[k]);
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Цитата
Во-первых, даже если ты его и изменишь, ничего страшного не будет - изменения не передаются в вызывающую программу

А вот сама сортировка всех строк, пока я не заменила k на i, происходила неправильно, она была только в одной строке... Ведь k, как я поняла, содержит номер упорядочиваемой строки, а если мы его меняем в процедуре, то второй проход будет уже не в той же строке, а значит сортировка полностью не пройдет. Если я не права, то поправь smile.gif

TYPE
vector = array[1 .. 10] of integer;
arr1 = array[1 .. 10] of vector;

arr1 - это массив состоящий из массивов? Тогда получается, что каждая строка и будет vector'ом, а дальше, в вызове, работаем по-строчно. Я правильно поняла?..


p.s. [оффтоп] я рада, что ты вернул рыжее чудо на аватар smile.gif [/оффтоп]
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
... а дальше, в вызове, работаем по-строчно. Я правильно поняла?
Правильно... Что, в принципе и требовалось в задании:
Цитата
написать процедуру, которая упорядочивает по возрастанию (обменом) 1 строку в массиве 10х10
, а если надо упорядочить только одну строку - зачем передавать всю матрицу?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Спасибо, с вашей помощью разобрался smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.12.2021 16:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name