type arstr=array[1..n]of string;
proceduree sortmid(a:arstr;n,k:integer);
var i,j:integer;
h:string;
ci,cj:char;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
begin
if length(a)>=k then
ci:=a[i,k]
else
ci=' ';
if length(a[j])>=k then
cj:=a[j,k]
else
cj=' ';
if ci>cj then
begin
h:=a;
a:=a[j];
a[j]:=h;
end
end;
end;
(Pascal)Сортировка ряда строк
Напишите процедуру sortmid, которая сортировала бы ряд из п строк в алфавитном порядке, основываясь
на к-ой литере каждой строки, к является параметром, передаваемым процедуре sortmid. Например, если к=3,
то элементы ряда должны быть отсортированы по возрастанию значения в третьей литере каждой строки.
Если длина строки меньше к, то будем предпологать, что его к-й литерой, реально не существующей, служит пробел.
потому что нужно его передавать по ссылке
Код:
proceduree sortmid(var a:arstr;n,k:integer);
Код:
const n=3;
type arstr=array[1..n]of string;
var i,j,k: integer;
mas: arstr;
procedure readmas (var mas:arstr);
var i:integer;
begin
writeln('Введите строки:');
for i:=1 to n do
begin
write('Строка №',i,': ');
readln(mas);
end;
end;
procedure inputK (var k:integer);
var kchar:char;
begin
writeln ('Введите литеру'); readln(kchar);
k:=ord(kchar);
end;
procedure sortmid(var mas:arstr;n,k:integer);
var i,j:integer;
h:string;
ci,cj:char;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
begin
if length(mas)>=k then
ci:=mas[i,k]
else
ci:=' ';
if length(mas[j])>=k then
cj:=mas[j,k]
else
cj:=' ';
if ci>cj then
begin
h:=mas;
mas:=mas[j];
mas[j]:=h;
end
end;
end;
begin {main}
{обращение к русскому языку}
setconsoleCp(1251);
setconsoleOutputCp(1251);
{ввод}
readmas(mas);
inputK (k);
{обработка}
sortmid(mas,n,k);
{вывод}
readln;
end.
type arstr=array[1..n]of string;
var i,j,k: integer;
mas: arstr;
procedure readmas (var mas:arstr);
var i:integer;
begin
writeln('Введите строки:');
for i:=1 to n do
begin
write('Строка №',i,': ');
readln(mas);
end;
end;
procedure inputK (var k:integer);
var kchar:char;
begin
writeln ('Введите литеру'); readln(kchar);
k:=ord(kchar);
end;
procedure sortmid(var mas:arstr;n,k:integer);
var i,j:integer;
h:string;
ci,cj:char;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
begin
if length(mas)>=k then
ci:=mas[i,k]
else
ci:=' ';
if length(mas[j])>=k then
cj:=mas[j,k]
else
cj:=' ';
if ci>cj then
begin
h:=mas;
mas:=mas[j];
mas[j]:=h;
end
end;
end;
begin {main}
{обращение к русскому языку}
setconsoleCp(1251);
setconsoleOutputCp(1251);
{ввод}
readmas(mas);
inputK (k);
{обработка}
sortmid(mas,n,k);
{вывод}
readln;
end.
Код:
if ci>cj then
begin
h:=mas;
mas:=mas[j];
mas[j]:=h;
end
begin
h:=mas;
mas:=mas[j];
mas[j]:=h;
end
т. е. :
Код:
else
begin
h:=mas[j];
mas[j]:=mas;
mas:=h;
end
begin
h:=mas[j];
mas[j]:=mas;
mas:=h;
end
Верно?
Не смотрите на это!!! Чёрт, тупанул так тупанул! Не надо никакого else, прошу простить за идиотизм!