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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2007, 12:33   #1
V25
 
Регистрация: 15.04.2007
Сообщений: 6
Вопрос СПИСОК (помогите, плиз!!!)

Пожалуйста, помогите решить задачу на упорядоченный список:
Дан список, содержащий информацию о книге (название,, год издания, автор), список упорядочен по фамилии автора. Добавить информацию о новой книге, сохранив упорядоченность.

(У меня не получается осуществлять поиск по первой букве фамилии...)
V25 вне форума Ответить с цитированием
Старый 03.06.2007, 13:44   #2
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
Вопрос Уточнение!!!

Тебе динамический список или обычную запись?
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума Ответить с цитированием
Старый 03.06.2007, 14:19   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

как-то так наверно, если односвязный список (next - указатель на следующий элемент)
Код:
// n - указатель на новый элемент списка
// head - Указатель на голову списка
if head = nil then 
begin
  head = n;
  n^.next := nil;
end
else
  begin
    while (p^.Next <> nil)and
           (p^.Next^.autor <= n^.autor) do p := p^next;
    n^.next := p^.next;
    p^.next := n;
  end;
pu4koff вне форума Ответить с цитированием
Старый 05.06.2007, 13:29   #4
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
Подмигивание Пожалуйста!

Вопоменяйт тебе образец!!! В него подсавь свои данные (сортировка у меня по номеру специальности).
Код программы (ЧАСТЬ 1):
Код:
 
Uses crt;
 Type
    pSp=^Spisok;
    Spisok=Record
    FIO:String[20];
    Fakultet:String[8];
    Spets:String[6];
    Nom:Byte;
    P:pSp;
 End;
    FN=File of Spisok;
    Var
       T:FN;
       Sp:pSp;
       A,D,N,i:Byte;
       S:Spisok;
       Key,Dl:String[8];
 
Procedure Shapka;
 Begin
    Writeln('╔═══════╦══════════════════════╦═══════════╦═══════════════╗');
    Writeln('║ НОМЕР ║     ФАМИЛИЯ  ИМЯ     ║ ФАКУЛЬТЕТ ║ СПЕЦИАЛЬНОСТЬ ║');
    Writeln('║  п/п  ║       ОТЧЕСТВО       ║           ║   (цифрами)   ║');
    Writeln('╠═══════╬══════════════════════╬═══════════╬═══════════════╣');
 End;
 
Procedure Zapis(Var F:FN);
 Begin
    Writeln;
    Write('Введите количество записей: ');
    Readln(N);
       Rewrite(F);
          For i:=1 to N do
             With S do
                Begin
                   Writeln;
                   Write('        Введите номер записи: ');
                   Readln(Nom);
                   Write('        Введите ФИО студента: ');
                   Readln(FIO);
                   Write('  Введите факультет студента: ');
                   Readln(Fakultet);
                   Write(' Введите номер специальности: ');
                   Readln(Spets);
                   Write(F,S);
                End;
       Close(F);
    ClrScr;
End;
 
Procedure Sort(Var Z:Spisok);
 Var
    Now,Next,Pr:pSp;
 Begin
    Next:=Sp;
    Pr:=Nil;
    New(Now);
    Now^:=Z;
       While (Next<>Nil) and (Now^.FIO>Next^.FIO) do
          Begin
             Pr:=Next;
             Next:=Next^.P;
          End;
             If Now^.FIO<Next^.FIO then
                Now^.P:=Next;
                   If Pr=Nil then
                      Sp:=Now
                         Else
                            Pr^.P:=Now;
 End;
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума Ответить с цитированием
Старый 05.06.2007, 13:30   #5
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
Подмигивание Пожалуйста!

Код программы (ЧАСТЬ 2):
Код:
 
Procedure Chtenie(Var F:FN);
 Begin
    {$I-}
    Reset(F);
    {$I+}
       If IOResult<>0 then
          Begin
             Writeln('Файл не найден!');
             ReadKey;
             Halt;
          End;
             Shapka;
                While not Eof(F) do
                   With S do
                      Begin
                         Read(F,S);
                         Sort(S);
                         Write('║ ',Nom:5,' ║ ');
                         Write(FIO:20,' ║ ');
                         Write(Fakultet:9,' ║ ');
                         Write(Spets:13,' ║');
                         Writeln;
                      End;
                         Writeln ('╚═══════╩══════════════════════╩═══════════╩═══════════════╝');
    Close(F);
 End;
 
Procedure Vivod;
  Var
     Next:pSp;
  Begin
     Shapka;
        Next:=Sp;
           While Next<>Nil do
              Begin
                 Write('║ ',Next^.Nom:5,' ║ ');
                 Write(Next^.FIO:20,' ║ ');
                 Write(Next^.Fakultet:9,' ║ ');
                 Write(Next^.Spets:13,' ║');
                 Writeln;
                    Next:=Next^.P;
              End;
                 Writeln ('╚═══════╩══════════════════════╩═══════════╩═══════════════╝');
  End;
 
Procedure Dopolnenie;
  Begin
     Write(' Введите количество добавляемых записей: ');
     Readln(N);
        For i:=1 to N do
           With S do
              Begin
                 Writeln;
                 Write('        Введите номер записи: ');
                 Readln(Nom);
                 Write('        Введите ФИО студента: ');
                 Readln(FIO);
                 Write('  Введите факультет студента: ');
                 Readln(Fakultet);
                 Write(' Введите номер специальности: ');
                 Readln(Spets);
                    Sort(S);
               End;
  End;
 
Begin
  ClrScr;
     Assign(T,'C:\Din_Spis.Dat');
        Writeln('Нажмите <Enter>, чтобы ввести свои данные.');
        Writeln('Нажмите <Esc>, чтобы ввести данные из файла Din_Spis.dat');
           D:=Ord(ReadKey);
              If D=13 then
                 Zapis(T);
                 Chtenie(T);
  Clrscr;
     Writeln('Полный список:');
        Vivod;
           Writeln('Для добавления данных нажмите <Enter>.');
           D:=Ord(ReadKey);
              If D=13 then
                  Dopolnenie;
                     Vivod;
                     readkey;
End.
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные-проверка-список (список на другом листе) Inbox Microsoft Office Excel 7 26.12.2008 01:43
Помогите пож-та.Паскаль. Линейный односвязный список (ЛОС) tonich Паскаль, Turbo Pascal, PascalABC.NET 1 25.02.2008 21:55
Линейный однозвязаный список, помогите плиз с задачкой Vasek Общие вопросы C/C++ 2 14.01.2008 03:28
Помогите отсортировать список ret83 Microsoft Office Excel 8 29.12.2007 13:41
Помогите плиз deniska3000 Microsoft Office Excel 3 20.03.2007 12:56