Привет всем. я тут новичок. И мне очнеь срочно нужна ваша помощь. Помогите очень прошу. Задача такова: В текстовой файле 5-8 строк. Мне надо отсортировать их по алфавиту. То есть строки надо отсортировать по фамилиям , находящимсяпрямо в начале всех строк. Вывести на экран это получается , а вот с процедурой сортировки что то совсем никак!!! помогите а то отсался последний зачет получить а тут такая вот чтука. В FAQе уже не однократно был -но там же ничего не понятно. Вот примерно что у меня получилось
Program Zadanie_3; uses crt; var f,g:text; str:array [1..5] of string; procedure vivod (var f:text); var i:integer; begin reset(f); i:=1; while not eof(f) do begin readln(f,str[i]); writeln(str[i]); i:=i+1; end;
end; procedure alfavit; var x: string; i,j: integer; str:array [1..5] of string;
begin reset(f); rewrite(g); i:=1; for i:=1 to 5 do begin for j:=5 downto 1 do begin if str[i+1]>str[i] then begin x:=str[i]; str[i]:=str[i+1]; str[i+1]:=x; writeln (str[i]); end; end; end;
procedure alfavit; var x: string; i,j: integer; { str:array [1..5] of string; } { <--- Эта строка - не нужна }
begin reset(f); rewrite(g); i:=1; for i:=1 to 5 do begin for j:=5 downto i + 1 do { <--- До i + 1, а не до i } begin if str[j - 1]>str[j] then { <--- Здесь работаем по индексу ВНУТРЕННЕГО цикла } begin x:=str[j]; str[j]:=str[j-1]; str[j-1]:=x; { writeln (str[i]); } { <--- Печатаем не здесь } end; end; writeln (str[i]); { <--- А вот тут } writeln (g, str[i]); { <--- В файл тоже не забываем занести } end;
erase(f); close(g); { <--- Сначала закроем файл, чтобы не потерять результаты } rename(g,'temp.txt'); { и только потом - переименуем } { reset(f); } { <--- Этого делать не надо, ты уже удалил файл } end;
Остальная часть программы остается без изменений...
Child of Bodom
25.12.2006 22:18
Что то она не работает должным образом:первые буквы фамилий убирает, и не сортирует совсем
volvo
25.12.2006 22:31
На твоем примере все работает безошибочно... Ничего не удаляет лишнего (у тебя, кстати, в файле TXT после последней строки должен быть нажат Enter, иначе последнюю строку программа просто не прочтет из файла с помошью ReadLn(f, ...))
Child of Bodom
25.12.2006 22:49
Это очень странно. У меня первые 2 убираются, и список ну ни как не сортируется. Может у меня версия паскаля не та или что нибудь еще ????А пробел я поставил
volvo
25.12.2006 23:00
Ну-ка, выложи еще раз ИСПРАВЛЕННЫЙ код сюда, посмотрим...
Child of Bodom
25.12.2006 23:06
Вот он:
Program Zadanie_3; uses crt; var f,g:text; procedure vivod (var f:text); var i:integer; str:array [1..5] of string; begin reset(f); i:=1; while not eof(f) do begin readln(f,str[i]); writeln(str[i]); i:=i+1; end;
end; procedure alfavit; var x: string; i,j: integer; str:array [1..5] of string;
begin reset(f); rewrite(g); for i:=1 to 5 do begin for j:=5 downto (i+1) do begin if str[j+1]>str[j] then begin x:=str[i]; { может здесь в место i надо о поставить?} str[i]:=str[i+1]; str[i+1]:=x; end; end; writeln (str[i]); writeln (g,str[i]); end; close (g); { erase(f); rename(g,'Bolnica.txt'); } { Это чтоб постоянно не возвращать оригинал временно} end;
BEGIN clrscr; assign (f,'BOLNITCA.txt'); assign (g,'ddddd.txt'); reset(f); rewrite (g); vivod(f); readln; clrscr; alfavit; close (f); readln; end.
[code]
volvo
25.12.2006 23:11
Ну, я же тебе написал, "читай комментарии" - и каждое изменение объяснил !!! А ты опять вместо J используешь I... Ищи несовпадения, я второй раз ничего исправлять не буду...
И тегами пользуйся ... (Кнопка "Изменить -> Полное редактирование" Выделяешь текст программы, комбобокс CODE - выбираешь язык)
Child of Bodom
25.12.2006 23:23
Все i переделал на j. Я попробовал в самом текстовом файле сдвинуть все строки в право на два пробела. Что то вроде сделалось. Но потом я опять запустил прогу и теперь там начали появлятся иероглифы. Что мне делать???Скажите
Child of Bodom
25.12.2006 23:58
Знатоки помогите пожалуйста. Срочно очень нужно решить!!!
volvo
26.12.2006 0:07
У всех все срочно, блин... Ты вчера где был? А неделю назад?
Вот файл, который отработал на 4-х разных компиляторах: (НИЧЕГО не трогай, только запусти и проверь, работает ли у тебя ИМЕННО на моем TXT-файле)
Знаете что я вам скажу:вы волшебник. Все заработало, хотя щас сверил коды индентичны хоть ты тресни. И все равно большое вам спасибо!!!!а можете еще пару задачек решить, но не таких срочных. Они как бы на половину работаю. Там осталось что то добавить чего я не могу понять и они должны заработать как надо!!! Ну так сможете помочь еще???
мисс_граффити
26.12.2006 0:55
для начала вот эту:
Цитата
И тегами пользуйся ... (Кнопка "Изменить -> Полное редактирование" Выделяешь текст программы, комбобокс CODE - выбираешь язык)
рекомендацию выполни!
Гость
26.12.2006 13:27
Не могу найти кнопки изменить!!!Но на будущее учту!!! Господа знающие программисты, оказывается в этой задаче надо было еще список отсортировать по диагнозам. Вы ничем помочь не сможете???
volvo
26.12.2006 14:35
Цитата
в этой задаче надо было еще список отсортировать по диагнозам
В процедуре сортировки замени
if str[j - 1]>str[j] then
на
if copy(str[j - 1], 37, 255) > copy(str[j], 37, 255) then
тогда список будет сортироваться по диагнозам...
Цитата
Не могу найти кнопки изменить!!!
Под Гостем ??? И не найдешь...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.