Помощь - Поиск - Пользователи - Календарь
Полная версия: Срочно нужна программа для курсовой на линейные списки
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Gizmo
Вот и сессионый петух клюнул в неподходящее время в неподходящее место,поэтому огромная просьба помочь в написании программы на создание и упорядоченние линейных списков.
1)Создать список упорядоченный по возрастанию ключей.Структура данных эл-та:фамилия,номер телефона.По номеру тел. звонящего абонента выдать его фамилию.
2)По заданной фамилии выдать телефоны всех однофамильцев.
Разницы нету что использовать :стеки,деки или очереди.
PS Уже писал на других форумах посвящённых этой тематики,им оказалось СЛАБО.
volvo
Ну, на форумы-то ты писал... А сам пробовал?

Полностью ЗА ТЕБЯ и у нас тебе решать не будут. Помочь - пожалуйста, но ты ХОТЯ БЫ начни !!!
Gizmo
Программу работающую я написал ,токо использовал ссылки.Декан не принял,а вот про линейные списки я ноль.Если не саму программу ,то хотя бы дайте ссылку на сайт где можно найти эту прогу. wacko.gif
Gizmo
Я почти сделал,но остались недоработки.
Ниже привожу текст программы :
program z1; 
uses crt; 
var chel:record 
fam:string; 
nom:longint; 
end; 
x:string; 
fa:text; 
kol,i:byte; 

begin 
clrscr; 
assign(fa,'a.txt'); 
{rewrite(fa); 
writeln('vvedite kol-vo dannuh'); 
readln(kol); 
for i:=1 to kol do begin 
with chel do begin 
writeln('vvedite familiyu'); 
readln(fam); 
writeln(fa,fam); 
writeln('vvedite nomer'); 
readln(nom); 
writeln(fa,nom); 
end; 
end; 
close(fa);} 
reset(fa); 
readln(x); 
while not eof(fa) do with chel do begin 
readln(fa,fam); 
readln(fa,nom); 
if x=fam then writeln(nom); 
end; 
close(fa); 
end.

Токо осталось добавить блок в котором будет по заданной фамилии выводить тел. всех однофамильцев.Программа токо написанна по-этому возможны ошибки.И если кто знает как можно упорядочить списки по возрастанию.
PS курсач сдаю 25 мая
klem4
Так, ну во первых у тебя какая-то ерунда ... ты уточни тебе список записей нужен или массив ?
Gizmo
Цитата(klem4 @ 22.05.2006 20:06) *

Так, ну во первых у тебя какая-то ерунда ... ты уточни тебе список записей нужен или массив ?

Нужен линейный список,а данные ввожу сначала в файл,а потом из файла перебираю
klem4
Ну тогда это делается по другому ... вот пример ввода списка вручную, попробуй сделать тоже из файла

в первой строке файла храни кол-во элементов (n), а далее например n*2 строк

имя1
номер1
имя2
номер2
...

читай их и пиши в список.

uses crt;

const

  max = 10;

type

  TData = record
    name, number : string;
  end;

  PItem = ^TItem;

  TItem = record
    data : TData;
    next : PItem;
  end;

procedure InputData(var DB : PItem; n : integer);
var
  newItem : PItem;
  name, number : string;

begin

  DB := nil;

  while (n > 0) do begin

    writeln;
    write('Name = '); readln(name);
    write('Number = '); readln(number);

    New(newItem);
    newItem^.next := DB;
    newItem^.data.name := name;
    newItem^.data.number := number;

    DB := newItem;

    dec(n);
  end;
end;

procedure PrintData(var DB : PItem; n : integer);
var
  item : PItem;
begin
  item := DB;
  while (item <> nil) do begin
    writeln;
    writeln(item^.data.name);
    writeln(item^.data.number);
    item := item^.next;
  end;
end;

var

   n : integer;

   DataBase : PItem;
begin

  clrscr;

  write('n = '); readln(n);

  InputData(DataBase, n);

  writeln;

  PrintData(DataBase, n);
  readln;
end.
Gizmo
Одна проблема ,кто нибудь знает как упорядочить список по возрастанию ключей?
volvo
сортировка списка простыми вставками

чем не устраивает? Правда, подправить малость придется, чтоб сортировало по нужному тебе ключу...
Gizmo
Сликом геморройно переделывать эту прогу для моей(я уже писал что в списках я ноль).Мне не вся прога нужна а токо кусок чтобы сортировал ключи по возрастанию(по фамилии сортируем).Но всё равно Thanks
Если у кого есть этот кусок проги ,просьба скинуть.
PS А чё с моим вводом данных в файл,он правильный или нет?У меня прога пашет,но здесь писали типа это ерунда. wacko.gif
volvo
Цитата(Gizmo @ 23.05.2006 17:23)
Сликом геморройно переделывать эту прогу для моей(я уже писал что в списках я ноль). Мне не вся прога нужна а токо кусок чтобы сортировал ключи по возрастанию(по фамилии сортируем).
Ну я же написАл, что исправлений будет очень мало:

С учетом тех типов, которые привел в программе klem4, функция сортировки будет выглядеть так:
function insert_sort(L: pitem): pitem;

  function insert(a: pitem; L: pitem): pitem;
  begin
    a^.next := nil;
    if l = nil then insert := a
    else
      if a^.data.name < L^.data.name 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 insert_sort := nil
  else insert_sort := insert(L, insert_sort(L^.next));
end;


P.S. Не забудь как она вызывается !!!
DataBase := insert_sort(DataBase);
, и никак иначе...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.