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

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

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

 
 Ответить  Открыть новую тему 
> Программа на Указатели (PASCAL), Операционная система MS – DOS все адресуемое пространство делит на сег
сообщение
Сообщение #1





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

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


Используя 1н просмотр текстового файла , вывести все его строки в порядке увеличения содержания в них цифр (строки должны содержать цифры).

p.s.Во время "просмотра" файла надо занести "наши" строки в список, потом произвести сортировку списка и ,наконец, выводить ответ в порядке увеличения.


--------------------
Я бесценна! Для всего остального есть Master card
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Задача на занесение данных из файла в динамический список неоднократно решалась. Может, проще в поиске найти, чем опять в очередной раз жевать одно и то же?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


Цитата(volvo @ 6.01.2011 13:10) *

Задача на занесение данных из файла в динамический список неоднократно решалась. Может, проще в поиске найти, чем опять в очередной раз жевать одно и то же?

Да искалось, но как-то не нашлось!(( Всё вокруг да около, а чёткой формулировки нет... Подскажите пожалуйста как сделать!

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


--------------------
Я бесценна! Для всего остального есть Master card
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Ну вот смотри, каркас программы (кое-что я убрал, компилироваться программа будет, а работать - будет неправильно. Доделай то, что написано в комментариях - заработает)
type
PNode = ^TNode;

TList =
record
start, finish: PNode;
end;

TNode =
record
n: integer;
s: string;
next: PNode;
end;

procedure AddToList(var L: TList; s: string; digits: Integer);
var T: PNode;
begin
new(T);
T^.next := nil;
T^.s := s;
T^.n := digits;

if L.start = nil then
L.start := T
else
L.finish^.next := T;

L.finish := T;
end;

{ Эту сортировку я вставил, потому что была готовая, другую было лень сочинять }
function SortList(L: PNode): PNode;

function insert(a: PNode; L: PNode): PNode;
begin
a^.next := nil;
if L = nil then insert := a
else
if a^.n < L^.n then begin
a^.next := L; insert := a;
end
else begin
L^.next := insert(a, L^.next);
insert := L;
end;
end;

begin
if L = nil then SortList := nil
else SortList := insert(L, SortList(L^.next));
end;

procedure PrintList(L: PNode);
begin
while L <> nil do
begin
writeln(L^.s);
L := L^.next;
end;
end;

function Count(s: string): integer;
{
Это тебе для самостоятельной реализации: функция получает строку
и должна вернуть количество цифр в этой строке
}
begin
end;

var
f: text;
s: string;
MyList: TList;
n: integer;

begin
MyList.start := nil; MyList.finish := nil;

assign(f, 'ftest.txt'); reset(f);
while not seekeof(f) do
begin
readln(f, s);
n := Count(s);
if n > 0 then AddToList(MyList, s, n);
end;
close(f);

PrintList(myList.start);
readln;

MyList.start := SortList(Mylist.start);
PrintList(myList.start);
readln;

{ ... Здесь список надо будет удалить - попробуй сделать это сама }
end.

 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


Хорошо.. Спасибо больше!

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


--------------------
Я бесценна! Для всего остального есть Master card
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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


Цитата(volvo @ 6.01.2011 14:51) *

Ну вот смотри, каркас программы (кое-что я убрал, компилироваться программа будет, а работать - будет неправильно. Доделай то, что написано в комментариях - заработает)

вот что-то додуманное:
Код
Program Ukazateli;
type
PNode = ^TNode;

TList =
record
start, finish: PNode;
end;

TNode =
record
n: integer;
s: string;
next: PNode;
end;

procedure AddToList(var L: TList; s: string; digits: Integer);
var T: PNode;
begin
new(T);
T^.next := nil;
T^.s := s;
T^.n := digits;

if L.start = nil then
L.start := T
else
L.finish^.next := T;

L.finish := T;
end;

function SortList(L: PNode): PNode;
var i,j:PNode;q:TNode;
begin
i:=l;
while i<>nil do begin
   j:=l;
   while j<>nil do begin
    if i^.s>j^.s then begin
      q:=i^;
      i^.n:=j^.n;i^.s:=j^.s;
      j^.n:=q.n;j^.s:=q.s;
    end;
    j:=j^.next;
   end;
  i:=i^.next;
end;
end;

procedure PrintList(L: PNode);
begin
while L <> nil do
begin
writeln(L^.s);
L := L^.next;
end;
end;

function Count(s: string): integer;
var i:integer;
begin
result:=0;
for i:=1 to length(s) do
if s[i] in ['0'..'9'] then inc(result);
end;

var
f: text;
s: string;
MyList: TList;
n: integer;

begin
MyList.start := nil; MyList.finish := nil;

assign(f, 'PFile.txt'); reset(f);
while not seekeof(f) do
begin
readln(f, s);
n := Count(s);
if n > 0 then AddToList(MyList, s, n);
end;
close(f);

PrintList(myList.start);
readln;

SortList(Mylist.start);
PrintList(myList.start);
readln;

end.

Но программа не выводит строки в порядке увеличения!( Помогите додумать!


--------------------
Я бесценна! Для всего остального есть Master card
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
программа не выводит строки в порядке увеличения!
Программа не должна выводить строки в порядке увеличения. Она должна выводить строки в порядке возрастания количества цифр, содержащихся в строках. У тебя в процедуре сортировки условие неправильное. Вот тут:

function SortList(L: PNode): PNode;
var i,j:PNode;q:TNode;
begin
i:=l;
while i<>nil do begin
j:=l;
while j<>nil do begin
if i^.s>j^.s then begin { <--- Вот тут ты сравниваешь две строки. Просто, по алфавиту... }
q:=i^;
i^.n:=j^.n;i^.s:=j^.s;
j^.n:=q.n;j^.s:=q.s;
end;
j:=j^.next;
end;
i:=i^.next;
end;
end;

... нужно делать другое сравнение.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





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

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


Цитата(volvo @ 7.01.2011 17:06) *

Программа не должна выводить строки в порядке увеличения. Она должна выводить строки в порядке возрастания количества цифр, содержащихся в строках. У тебя в процедуре сортировки условие неправильное. Вот тут:

function SortList(L: PNode): PNode;
var i,j:PNode;q:TNode;
begin
i:=l;
while i<>nil do begin
j:=l;
while j<>nil do begin
if i^.s>j^.s then begin { <--- Вот тут ты сравниваешь две строки. Просто, по алфавиту... }
q:=i^;
i^.n:=j^.n;i^.s:=j^.s;
j^.n:=q.n;j^.s:=q.s;
end;
j:=j^.next;
end;
i:=i^.next;
end;
end;

... нужно делать другое сравнение.

а если поменять:
function SortList(L: PNode): PNode;
var i,j:PNode;q:TNode;
begin
i:=l;
while i<>nil do begin
j:=l;
while j<>nil do begin
if i^.s>j^.s then begin { <--- на if i^.n<j^.n then begin... }
q:=i^;
i^.n:=j^.n;i^.s:=j^.s;
j^.n:=q.n;j^.s:=q.s;
end;
j:=j^.next;
end;
i:=i^.next;
end;
end;




--------------------
Я бесценна! Для всего остального есть Master card
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Вот тогда будет выводить то, что требовалось в задании. И останется только удалить список после окончания работы.
 К началу страницы 
+ Ответить 

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

 





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