Страница 1 из 2
Сортировка строк(Паскаль)
Добавлено: 04 мар 2008, 12:20
gluik
Вводится массив строк содержащий названия(фамилии) на русском требуется вывести его на экран в алфавитном порядке.Подскажите как это сделать.
Re: Сортировка строк(Паскаль)
Добавлено: 04 мар 2008, 16:17
MOTOCoder
Например так:
[syntax='Delphi']
program sortarr;
const
N=5;
var
data:array[0..N]of string;
x,i:integer;
f:text;
procedure insert(idx:integer;str:string);
var j:integer;
begin
for j:=N-1 downto idx do
data[j+1]:=data[j];
data[idx]:=str;
end;
procedure delete(idx:integer);
var j:integer;
begin
for j:=idx to n-1 do
data[j]:=data[j+1];
end;
procedure sort;
begin
for i := 0 to (N-1) do
for x := 0 to (N - 1) do
if (data[x] < data) and (x > i) then
begin
Insert(i, data[x]);
Delete(x+ 1);
end;
end;
begin
writeln('Введите ',N-1,' строк(и)');
for i:=1 to N-1 do
readln(Data);
sort;
writeln;
for i:=1 to N-1 do
writeln(data);
readln;
end.
[/syntax]
Re: Сортировка строк(Паскаль)
Добавлено: 04 мар 2008, 22:45
C_O_D_E
Мой вариант реализации. Сама делала достаточно давно, если что, то могу подкорректировать.
[syntax=Delphi]
uses crt;
const t=20; {макс. кол-во слов в предлож.}
ch:set of char =['a'..'z','A'..'Z','а'..'я','А'..'Я']; {допуст. символы}
procedure InputWord(var stroka:string); {ввод предлож.}
begin
write('Введите предложение:');
readln(stroka);
end;
procedure Find(stroka:string;var slova:array of string;var n:byte);{выделение слов из предложения}
var m,i,c:byte;
begin
n:=1;
i:=0; {номер символа, с кот. нач. копир.}
c:=0; {кол-во копир. символов}
for m:=1 to length(stroka) do {текущий символ предложения}
begin
if stroka[m] in ch then
if i=0 then {указ-ль на первую букву слова}
begin i:=m; c:=c+1; end
else c:=c+1 {увел. кол-во копир. символов}
else if i<>0 then
begin slova[n]:=copy(stroka,i,c); inc(n); i:=0; c:=0; end;{зап. мас. слов}
if m=length(stroka) then
begin slova[n]:=copy(stroka,i,c); inc(n); end; {принуд. заполн. мас. слов}
end;
end;
procedure Sort(var slova:array of string; n:byte); {сортировка}
var i,j,k:byte; min:string;
begin
for j:=1 to n-2 do {номер слова, с кот. начинается сравн.}
for i:=j+1 to n-1 do {текущий номер слова}
begin
k:=1; {номер тек. буквы}
while (slova[k]=slova[j][k]) and {сравн. буквы}
(k<=length(slova)) do inc(k); {тек. слова с}
if slova[k] < slova[j][k] then {буквой мин. слова}
begin {обмен слов}
min:=slova;
slova:=slova[j];
slova[j]:=min;
end;
end;
end;
procedure WriteText(slova:array of string; n:byte); {вывод слов}
var i:byte; {номер слова}
res:string; {строка-результат}
begin
res:='';
write ('Полученный результат:');
for i:=1 to n do
if slova[0] <> #0 then res:=concat(res,slova)+' ';
writeln(res);
end;
var str:string; {введ. предложение}
word:array [1..t] of string; {слова предложения}
n:byte; {номер последнего слова}
begin
clrscr;
Randomize;
writeln (' Напечатать слова, входящие в предложение, в алфавитном порядке');
writeln;
InputWord(str);
Find(str,word,n);
Sort(word,n);
WriteText(word,n);
readkey;
end.
[/syntax]
Re: Сортировка строк(Паскаль)
Добавлено: 05 мар 2008, 11:08
Хыиуду
Хосспади ты боже ж мой!
Код: Выделить всё
var i, j:integer; mas: array[1..100] of string; tmp:string;
begin
for i:=1 to 99 do
for j:=i+1 to 100 do
if mas[i][1]>mas[j][1] then
begin
tmp:=mas[i]; mas[i]:=mas[j]; mas[j]:=tmp;
end;
end.
Все! Кроме ввода и вывода
Re: Сортировка строк(Паскаль)
Добавлено: 05 мар 2008, 20:03
drummer
to Хыиуду:
А если первые буквы оказались одинаковые?
Код: Выделить всё
if mas[i]>mas[j] then
begin
tmp:=mas[i]; mas[i]:=mas[j]; mas[j]:=tmp;
end;
Re: Сортировка строк(Паскаль)
Добавлено: 06 мар 2008, 14:02
Хыиуду
Тьфу ты, да, второй индекс поставил совершенно автоматически, у меня сейчас как раз идет работа над программой, где сравнение идет по первым символам.
Re: Сортировка строк(Паскаль)
Добавлено: 06 мар 2008, 20:15
C_O_D_E
Господа, а чем Вас не устраивает мое оригинальное решение через множества?
Я конечно понимаю, что все за глубокую рациональность, но волю творчеству тож стоит давать!
Если бы Строители строили дома и др архитектурные сооружения так же, как программисты пишут программы, то первый, случайно залетевший, дятел разрушил бы цивилизацию! (с)
Re: Сортировка строк(Паскаль)
Добавлено: 07 мар 2008, 11:11
Хыиуду
А кто не дает волю творчеству? Все равно конечному пользователю способ реализации глубоко фиолетов, если он не оказывает влияния на конечный результат.
Re: Сортировка строк(Паскаль)
Добавлено: 07 мар 2008, 22:00
C_O_D_E
Моя реализация ошибочна? Вполне возможно. я не писала программу специально по это условие! я нашла реализацию своей работы, просто условие показалось похожим.
Re: Сортировка строк(Паскаль)
Добавлено: 17 мар 2008, 12:25
Хыиуду
Ну почему же ошибочна, я не проверял

В любом случае, для пользователя имеет значение только интерфейс (который в подобных учебных задачах практически отсутствует), скорость работы (которая в таких задачах совершенно не критична), и потребляемая память/объем диска (которая для таких задач ничтожно мала в сравнении с объемом памяти современного компа). А главное - чтобы работало.
А как пишет программист - это уж его дело. Хотите заниматься вольными художествами - занимайтесь на здоровье. А я вот люблю решения таких задач сводить к примитивизму везде, где это возможно.