Автор: murphy 12.12.2004 20:43
Помогите пожалуйста написать програмку.
А то шас в голову ничего не лезит.
Дан текст (массив строк) сформировать текст в котором все одинаковые символы стоят рядом.
для одной строки я придумал короткий способ
Код
for i:=2 to l-1 do
for j:=i+1 to l do
if s[i-1]=s[j] then
begin
tmp:=s[i];
s[i]:=s[j];
s[j]:=tmp;
end;
А для текста только большой тупой вариант в голове крутится.
Его даже писать не хочется.
:p2:
И еще может покритикуете ввод текста
Код
function readtx(var str:tx):byte;
var i:byte;
len: word;
key:char;
begin
len:=0;i:=0;
writeln('Please enter some text');
writeln(' > pressing Esc will clear line');
writeln(' > pressing Esc at the begining');
writeln(' of new line will end the entering.');
repeat
i:=i+1;
readln(str[i]);
key:=readkey;
until key=#27;
readtx:=i;
end;
Автор: volvo 12.12.2004 21:05
murphy
"Это" даже не надо было придумывать. То, что ты записал известно под названием сортировки пузырьком. А вот для массива строк могу предложить следующий алгоритм:
1. Описываешь массив из Char, в который поместятся все символы текста
2. Записываешь содержимое всех строк в этот массив и
3. Сортируешь его любым известным способом
4. Выводишь результат сортировки...
Это САМЫЙ простой вариант... :yes:
Автор: murphy 12.12.2004 21:10
Цитата
То, что ты записал известно под названием сортировки пузырьком.
почти пузырьком
За алгоритм бальшое спасибо.
Автор: murphy 17.12.2004 3:03
volvo
Я показал это учителю
Код
k:=0;
for i:=1 to n do
for j:=1 to length(s[i]) do
begin
k:=k+1;
res[k]:=s[i][j];
end;
for j:=1 to l do
for i:=1 to l-1 do
if res[i]>res[i+1] then
begin
tmp:=res[i];
res[i]:=res[i+1];
res[i+1]:=tmp;
end;
writeln('Длина текста: ', l);
writeln;
writeln('Pезультиующий текст:');
for i:=1 to k do
write(res[i]);
по вашему алгоритму
так она на меня чуть не накричала
и сказала что это почти самый сложный способ
Цитата
Это САМЫЙ простой вариант
Хотя я прикинул и думаю что это простой способ. :yes:
Я не пойму что она от меня хочет
Помогите пожалуйста :molitva: если я вас не сильно достал :p2: :p2:
З.Ы. По моему денег хочет.
Автор: volvo 17.12.2004 3:36
murphy
Хочешь еще один алгоритм?
Код
var
cnt: array[char] of integer;
s: string;
i: integer;
ch: char;
begin
s := 'sdj;alskjdf;laskjdf;laksjd;lkjf;lsdk;gjlskd;jgskgf';
for i := 1 to length(s) do
inc(cnt[s[i]]);
for ch := #32 to #255 do
for i := 1 to cnt[ch] do write(ch);
end.
Я думаю, переделать его для массива строк не составит труда :D
Автор: murphy 17.12.2004 4:24
volvo
Хороший алгоритм.
Мне понравился.
Я его понял.
У меня вопрос :p2:
можно ли это
Цитата
cnt: array[char] of integer;
заменить
Код
cnt: array[#0..#255] of integer;
Переделать легко :yes:
Спасибо?
Автор: volvo 17.12.2004 4:30
murphy
Код
var
cnt: array[char] of integer;
{Аналогично}
cnt: array[#0..#255] of integer;
Так что меняй... :yes: А чем Char не нравится?
Автор: murphy 17.12.2004 5:00
volvo
Цитата
А чем Char не нравится?
Нравиться просто хотел убедиться что я все правильно понял :D
Спасибо
Автор: Анютка 26.10.2005 21:21
Цитата
Я думаю, переделать его для массива строк не составит труда
А для меня составило :p2:
Автор: volvo 26.10.2005 22:07
Цитата
А для меня составило
Что именно? Добавить еще один внешний цикл?