IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Отсортировать строки по алфавиту. Как?
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


Привет всем. я тут новичок. И мне очнеь срочно нужна ваша помощь. Помогите очень прошу. Задача такова:
В текстовой файле 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;

erase(f);
rename(g,'temp.txt');
reset(f);
close(g);
end;

BEGIN
clrscr;
assign (f,'BOLNICTA.txt');
assign (g,'temp.txt');
vivod(f);
readln;
clrscr;
alfavit;
readln;
end.


Текстовый файлик вкладываю:

Сообщение отредактировано: volvo -


Прикрепленные файлы
Прикрепленный файл  BOLNITCA.TXT ( 241 байт ) Кол-во скачиваний: 191
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Смотри на комментарии:
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;

Остальная часть программы остается без изменений...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


Что то она не работает должным образом:первые буквы фамилий убирает, и не сортирует совсем

Сообщение отредактировано: Child of Bodom -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






На твоем примере все работает безошибочно... Ничего не удаляет лишнего (у тебя, кстати, в файле TXT после последней строки должен быть нажат Enter, иначе последнюю строку программа просто не прочтет из файла с помошью ReadLn(f, ...))
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


Это очень странно. У меня первые 2 убираются, и список ну ни как не сортируется. Может у меня версия паскаля не та или что нибудь еще ????А пробел я поставил
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Ну-ка, выложи еще раз ИСПРАВЛЕННЫЙ код сюда, посмотрим...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


Вот он:

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]

Сообщение отредактировано: Child of Bodom -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Ну, я же тебе написал, "читай комментарии" - и каждое изменение объяснил !!! А ты опять вместо J используешь I... Ищи несовпадения, я второй раз ничего исправлять не буду...

И тегами пользуйся ... (Кнопка "Изменить -> Полное редактирование" Выделяешь текст программы, комбобокс CODE - выбираешь язык)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


Все i переделал на j. Я попробовал в самом текстовом файле сдвинуть все строки в право на два пробела.
Что то вроде сделалось. Но потом я опять запустил прогу и теперь там начали появлятся иероглифы. Что мне делать???Скажите

Сообщение отредактировано: Child of Bodom -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 45
Пол: Мужской

Репутация: -  0  +


Знатоки помогите пожалуйста. Срочно очень нужно решить!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






У всех все срочно, блин... Ты вчера где был? А неделю назад? dry.gif

Вот файл, который отработал на 4-х разных компиляторах: (НИЧЕГО не трогай, только запусти и проверь, работает ли у тебя ИМЕННО на моем TXT-файле)

Прикрепленный файл  t.pas ( 814 байт ) Кол-во скачиваний: 498

Прикрепленный файл  BOLNITCA.TXT ( 243 байт ) Кол-во скачиваний: 457
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Знаете что я вам скажу:вы волшебник. Все заработало, хотя щас сверил коды индентичны хоть ты тресни. И все равно большое вам спасибо!!!!а можете еще пару задачек решить, но не таких срочных. Они как бы на половину работаю. Там осталось что то добавить чего я не могу понять и они должны заработать как надо!!! Ну так сможете помочь еще???
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


для начала вот эту:
Цитата
И тегами пользуйся ... (Кнопка "Изменить -> Полное редактирование" Выделяешь текст программы, комбобокс CODE - выбираешь язык)

рекомендацию выполни!


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Не могу найти кнопки изменить!!!Но на будущее учту!!! Господа знающие программисты, оказывается в этой задаче надо было еще список отсортировать по диагнозам. Вы ничем помочь не сможете???
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Гость






Цитата
в этой задаче надо было еще список отсортировать по диагнозам
В процедуре сортировки замени
if str[j - 1]>str[j] then

на
if copy(str[j - 1], 37, 255) > copy(str[j], 37, 255) then

тогда список будет сортироваться по диагнозам...

Цитата
Не могу найти кнопки изменить!!!
Под Гостем ??? blink.gif И не найдешь...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 21.09.2020 20:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name