Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2011, 16:49   #11
ElenCelsi
Пользователь
 
Аватар для ElenCelsi
 
Регистрация: 06.01.2011
Сообщений: 14
По умолчанию

Составленная программа ниже!

Последний раз редактировалось ElenCelsi; 07.01.2011 в 17:56.
ElenCelsi вне форума Ответить с цитированием
Старый 07.01.2011, 17:04   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

угу. правильно.
только в сортировке сравнивать надо не строки, а количество циферок в строке.
Измените в сортировке одну строчку (я выделил что заменить):
Код:
 while i<>nil do begin
   j:=l;
   while j<>nil do 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;

кстати, Ваш код содержит одну фишку, которой не было в Pascal
(она появилась позже, в Delphi, FreePascal)... У Вас какой компилятор?
речь идёт о возврате значения функции через result
я бы так переписал код функции подсчёта количества цифр в строке:
Код:
function Count(s: string): integer;
var k, i:integer;
begin
  k :=0;
  for i:=1 to length(s) do
    if s[i] in ['0'..'9'] then inc(k);
  Count := k;
end;
впрочем, это не обязательно. Можно и так оставить. Если всё компилируется и работает...
Главное, чтобы Вы про эту особенность знали...

Последний раз редактировалось Serge_Bliznykov; 07.01.2011 в 17:10.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.01.2011, 17:17   #13
ElenCelsi
Пользователь
 
Аватар для ElenCelsi
 
Регистрация: 06.01.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
угу. правильно.
только в сортировке сравнивать надо не строки, а количество циферок в строке.
Измените в сортировке одну строчку (я выделил что заменить):
Код:
 while i<>nil do begin
   j:=l;
   while j<>nil do 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;

кстати, Ваш код содержит одну фишку, которой не было в Pascal
(она появилась позже, в Delphi, FreePascal)... У Вас какой компилятор?
У меня ABS Паскаль!( на win7 просто у меня только на ноуте работает Turbo там 32х битная 7ёрка
ElenCelsi вне форума Ответить с цитированием
Старый 07.01.2011, 17:34   #14
ElenCelsi
Пользователь
 
Аватар для ElenCelsi
 
Регистрация: 06.01.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от ElenCelsi Посмотреть сообщение
У меня ABS Паскаль!( на win7 просто у меня только на ноуте работает Turbo там 32х битная 7ёрка
Перенесла все данный в Turbo с твоей поправкой, но всё равно не выводит в порядке увеличения! Вот вид на Турбо:
Код:
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^.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;

procedure PrintList(L: PNode);
begin
while L <> nil do
begin
writeln(L^.s);
L := L^.next;
end;
end;
function Count(s:string): integer;
var k,i:integer;
begin
k:=0;
for i:=1 to Length(s) do
if s[i] in ['0'..'9'] then inc (k);
count:=k;
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.

Последний раз редактировалось ElenCelsi; 07.01.2011 в 17:36.
ElenCelsi вне форума Ответить с цитированием
Старый 07.01.2011, 17:42   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

проверил Ваш код. всё работает.

вот, для текстового файла (PFile.rar)

Цитата:
Вот тут привет 1 ну и 239
А вот тут цифр нет вааще
А тут 99 цифр
А тут 1500
ну и последняя строчка 1
выдаётся (после сортировки)
Цитата:
ну и последняя строчка 1
А тут 99 цифр
А тут 1500
Вот тут привет 1 ну и 239
как видите, всё отсортировано, как и требуется.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.01.2011, 17:50   #16
ElenCelsi
Пользователь
 
Аватар для ElenCelsi
 
Регистрация: 06.01.2011
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
проверил Ваш код. всё работает.

вот, для текстового файла (Вложение 34302)


выдаётся (после сортировки)

как видите, всё отсортировано, как и требуется.
АА точно!) Ура работааеет!! Юху!
Спасибо огромное за помощь! !

А список надо удалять после окончания работы?

Последний раз редактировалось Stilet; 07.01.2011 в 19:02.
ElenCelsi вне форума Ответить с цитированием
Старый 07.01.2011, 19:03   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Желательно. И не просто удалять а освобождать каждый его элемент.
Хотя для некоторых преподавателей это не критично, тут уж как попадешся.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.01.2011, 22:49   #18
ElenCelsi
Пользователь
 
Аватар для ElenCelsi
 
Регистрация: 06.01.2011
Сообщений: 14
По умолчанию

А если не трудно будет подскажите.. Очистка будет как отдельная функция работать? В конце?
типо такой вот функции?:
Код:
Procedure ochistka(Digit : integer; Var u : Ukazatel );
Var
  x, dx : ukazatel ;
Begin
  x := u;
  while x<>Nil do
    if x^.Data=Digit
      then
        Begin
          if x=u
            then
              Begin
                u := u^.Next;
                Dispose(x);
                x := u;
              End
            else
              Begin
                dx^.Next := x^.Next;
                Dispose(x);
                x := dx^.Next;
              End;
        End 
      else
        Begin
          dx := x;
          x := x^.Next;
        End;
End;
ElenCelsi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка для Бонард Си... тема: указатели и массивы... Катюшенька Помощь студентам 2 26.01.2009 22:18
Помогите,plz,решить задачи на С++.Тема:Указатели и ф-ии!Срочно!!! Wia Помощь студентам 5 06.12.2008 12:30