![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Orevin |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: ![]() ![]() ![]() |
Нужно написать процедуру, которая упорядочивает по возрастанию (обменом) 1 строку в массиве 10х10. В самой программе с помощью этой процедуры упорядочить все строки.
По всякому пытался делать, но правильно работать никак не хочет. Помогите, пожалуйста, исправить ошибки. Прикрепленные файлы ![]() |
Айра |
![]()
Сообщение
#2
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: ![]() ![]() ![]() |
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.
Вроде все работает правильно.. Сообщение отредактировано: Айра - |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Оля, смотри:
Цитата {значение k у тебя передается из программы, так что здесь изменять его не следует, воспользуйся лучше переменной i} Во-первых, даже если ты его и изменишь, ничего страшного не будет - изменения не передаются в вызывающую программу, а вообще если ты не хочешь чтобы пользователь что-то менял - PROCEDURE poryadok(CONST k: integer; var a1: arr1); { <--- Пускай попробует теперь изменить }
![]() Но и это не главное... Главное - то, что процедура может быть проще: 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 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата Во-первых, даже если ты его и изменишь, ничего страшного не будет - изменения не передаются в вызывающую программу А вот сама сортировка всех строк, пока я не заменила k на i, происходила неправильно, она была только в одной строке... Ведь k, как я поняла, содержит номер упорядочиваемой строки, а если мы его меняем в процедуре, то второй проход будет уже не в той же строке, а значит сортировка полностью не пройдет. Если я не права, то поправь ![]() TYPE
vector = array[1 .. 10] of integer;
arr1 = array[1 .. 10] of vector;
arr1 - это массив состоящий из массивов? Тогда получается, что каждая строка и будет vector'ом, а дальше, в вызове, работаем по-строчно. Я правильно поняла?.. p.s. [оффтоп] я рада, что ты вернул рыжее чудо на аватар ![]() |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата ... а дальше, в вызове, работаем по-строчно. Я правильно поняла? Правильно... Что, в принципе и требовалось в задании:Цитата написать процедуру, которая упорядочивает по возрастанию (обменом) 1 строку в массиве 10х10 , а если надо упорядочить только одну строку - зачем передавать всю матрицу? |
Orevin |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо, с вашей помощью разобрался
![]() |
![]() ![]() |
![]() |
Текстовая версия | 21.04.2025 18:42 |