я вот такую прогу написала, кот должна выдавать в алф. порядке слова из файла. она выдает последнее слово н раз. что тут не так? можно ли использовать метод пузырька для сортировки массива из строк? вот у меня такая прога:
Код
program blah; uses crt; type r=1..500; mas=array[r] of string[10]; var i,k,l:integer; m,n:r; sp:mas; slovar:text; p,tmp:string; begin clrscr; assign(slovar,'slovar.txt'); reset(slovar); n:=1; while not eof(slovar) do begin readln(slovar,p); n:=n+1; {for i:=1 to length(p) do begin } for m:=1 to n-1 do begin sp[m]:=p; {end;} end; writeln(m,' ',sp[m]); for m:=n-1 downto 2 do for l:=1 to m-1 do if sp[l]>sp[l+1] then begin tmp:=sp[l]; sp[l]:=sp[l+1]; sp[l+1]:=tmp; end; end; writeln('v alfavitnom poryadke:'); for l:=1 to n-1 do writeln(l,' ',sp[l]); writeln(n-1); close(slovar); readkey; writeln('Programma zavershila rabotu.'); end.
она выдаёт последнее слово в файле, приравнивая его всем эл-там массива. почему так? в файле словарь.тхт даны строки типа
Код
HELLO MY NAME IS KATE на выходе: 1 HELLO 2 MY 3 NAME 4 IS 5 KATE 'v alfavitnom poryadke: 1 KATE 2 KATE 3 KATE 4 KATE 5 KATE
Автор: volvo 18.11.2004 22:09
Попробуй так:
program blah; uses crt; type r=1..500; mas=array[r] of string[10]; var i,k,l:integer; m,n:r; sp:mas; slovar:text; p,tmp:string; begin clrscr; assign(slovar,'slovar.txt'); reset(slovar); n:=1; while not eof(slovar) do begin readln(slovar,sp[n]); writeln(n,' ',sp[n]); n:=n+1; for m:=n-1 downto 2 do for l:=1 to m-1 do if sp[l]>sp[l+1] then begin tmp:=sp[l]; sp[l]:=sp[l+1]; sp[l+1]:=tmp; end; end; writeln('v alfavitnom poryadke:'); for l:=1 to n-1 do writeln(l,' ',sp[l]); writeln(n-1); close(slovar); readkey; writeln('Programma zavershila rabotu.'); end.
Автор: Altair 18.11.2004 22:12
Цитата
слова из файла
Каждое слово на отдельной строке?
Цитата
можно ли использовать метод пузырька для сортировки массива из строк?
Да конечно, но при сравнении строк действует правило: сначала сравнивается длинна строки, и если равны строки то уже по алфавиту...
Автор: APAL 18.11.2004 22:16
Цитата
сначала сравнивается длинна строки, и если равны строки то уже по алфавиту...
Только что проверил в TP7 - ничего подобного, сразу по алфавиту.
Цитата
If 'abcd'>'bc' then Writeln('Ok') else Writeln('No');
Автор: Altair 18.11.2004 22:24
Да, действительно... странно, я думал иначе... тогда нет проблемм... ;)
Автор: Гость_annie 18.11.2004 22:51
спасибо огромное за проверку ))))))) Да, в файле 1 слово на строку, но теперь уже всё ясно. всем спасибо
Автор: Altair 18.11.2004 22:56
Конечно, что тут не понятного, если код привели рабочий
Автор: volvo 18.11.2004 23:01
Oleg_Z Я только подправил код :p2:
Все равно
Автор: Гость 17.07.2007 2:06
Тема конечно старая, но мало ли еще кто догадается отсортировать строки пузырем. =)
Конечно, теоретически отсортировать можно. Но представьте реальную программу, в которой будет использоваться пузырь! Мало того, что он малопригоден для сортировки обычных чисел - квадратичная сложность обрекает ваш компьютер на глубокие раздумья уже при количестве элементов 10000.
А для еще большего количества строк непригоден даже qsort (быстрая сортировка, сложность n*log(n)). У меня сейчас стоит подобная задача - отсортировать 100000 строк длиной 15 за быстрое время. Сейчас работаю в направлении поразрядной сортировки (RadixSort, по-идее работает за линейное время).
Так что не вздумайте сортировать строки пузырем!
alext
Автор: volvo 17.07.2007 3:20
Цитата
Так что не вздумайте сортировать строки пузырем!
У тебя спрашивали, что-ли, как сортировать? Когда спросят, тогда будешь высказываться. О космических скоростях и галактических размерах в данной теме речь не шла.
Теоретиков, которые все время только работают в направлении, но у них всегда только теоретические высказывания (причем чаще всего - это набор слов) в последнее время толпы развелись... Экзамены закончились, что-ли? Теперь до сентября будут заумные ничего не значащие высказывания?