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

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

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

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





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

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


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

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


--------------------
Я бесценна! Для всего остального есть Master card
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
volvo
сообщение 6.01.2011 13:10
Сообщение #2


Гость






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





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

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


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

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

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

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


--------------------
Я бесценна! Для всего остального есть Master card
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.01.2011 14:51
Сообщение #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.

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





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

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


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

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


--------------------
Я бесценна! Для всего остального есть Master card
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
milk
сообщение 7.01.2011 16:59
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.01.2011 17:06
Сообщение #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;

... нужно делать другое сравнение.
 К началу страницы 
+ Ответить 
milk
сообщение 7.01.2011 17:21
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.01.2011 17:46
Сообщение #9


Гость






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

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

 



- Текстовая версия 20.06.2025 19:45
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"