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

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

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

 
 Ответить  Открыть новую тему 
> Связные списки Help, нужна помощь в решении задачи
sega
сообщение 1.06.2005 22:22
Сообщение #1


Гость






Доброго времени суток.

Описание программы: База данных, в неё заносится следующая информация:
- автор книги
- название книги
- цена книги

Возможные действия с базой данных:
- создание списка
- добавление в список
- нахождение по цене
- удаление элемента по номеру

Вывод БД происходит в таблице по 4 элемента на странице (экране)

Пару слов про переменные:
- book – является основным массивом (в него всё записывается)
- opis – массив, в который записываются книги с одинаковой ценой
- d:mas – массив, содержащий номера элементов из главного массива (book)

program laba3;
uses crt;
type
    mas=array [1..20] of integer;
    zap=record
                FIO:string[15];
                name:string[15];
                cena:real;
    end;
    spisok=array [1..16] of zap;
    ptrspisok=^spisok;
    procname=procedure (n:integer; opis:ptrspisok);
var
   book,opis:ptrspisok;
   j,n,k:integer;
   d:mas;
{$F+}
procedure sozd(var n:integer;  var book:ptrspisok);
var
   i:integer;
begin
     clrscr;
     if book<>nil then begin
        writeln('spisok uge sozdan');
        writeln('dla prodolgenia nagmi Enter');
        readln;
        exit;
     end;
     writeln('vvedite kolichestvo knig: ');
     readln(n);
     clrscr;
     new(book);
     for i:=1 to n do
         with book^[i] do begin
              writeln ('nomer : ',i);
              writeln('vvedite FIO: ');
              readln(FIO);
              writeln('vvedite name: ');
              readln(name);
              writeln ('vvedite cenu: ');
              readln(cena);
              clrscr;
         end;

end;
procedure add( var book:ptrspisok; var n:integer );
var
   k,i:integer;
begin
     clrscr;
     if book=nil then begin
                   writeln('spisok ne sozdan');
                   writeln('dla prodolgenia nagmi Enter');
                   readln;
                   exit;
            end;
     writeln('vvedite kolichesrvo vvodimih knig: ');
     readln(k);
     clrscr;
     for i:=n+1 to n+k do
         with book^[i] do begin
              writeln ('nomer : ',i);
              writeln('vvedite FIO: ');
              readln(FIO);
              writeln('vvedite name: ');
              readln(name);
              writeln ('vvedite cenu: ');
              readln(cena);
              clrscr;
         end;
     n:=n+k;
end;
procedure vivod(n:integer; book:ptrspisok);
var
   i,a,b:integer;
begin
     clrscr;
     if n<3 then b:=n
     else b:=3;
     a:=1;
     while a<=n do begin
           clrscr;
           writeln(b,' ','iz ',n,' ');
           writeln('ЪДДДДДВДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДВДДДДДДДї');
           writeln('і     і        FIO       і        name      і  cena і');
           writeln('ГДДДДДЕДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДЕДДДДДДДґ');
           for i:=a to b do
               with book^[i] do
               writeln('і  ', i ,'  і ',FIO:15, '  і ',name:15,'  і ',cena:6:2,'і');
           writeln('АДДДДДБДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДБДДДДДДДЩ');
           writeln;
           a:=b+1;
           if (n-B)<3 then
                b:=n
           else
                b:=b+3;
           readln;
     end;
end;
procedure poisk(book:ptrspisok; n:integer; var opis:ptrspisok; var j:integer; var d:mas);
var
   c:real; i:integer;
begin
     clrscr;
     writeln('vvedite cenu: ');
     readln(c);
     j:=0;
     new(opis);
     for i:=1 to n do
         if c=book^[i].cena then begin
            j:=j+1;
            d[j]:=i;
            opis^[j]:=book^[i];
         end;
end;
procedure delet(var j:integer; vivod:procname;  opis:ptrspisok;  var d:mas; var k,n:integer; var book:ptrspisok);
var
   b,i,c:integer; l:char; m:ptrspisok;
begin
     k:=0;
     repeat
           repeat
                 repeat
                       clrscr;
                       vivod(j,opis);
                       writeln('budete udaliat element (y/n) : ');
                       readln(l);
                       if (l<>'y') and (l<>'n') then begin
                          writeln ('otvet nepravelnei');
                          writeln('poprobuite ehe raz');
                          readln;
                       end;
                 until (l='y') or (l='n');
                 if l='n' then exit;
                 repeat
                       clrscr;
                       vivod(j,opis);
                       writeln('vvedite nomer udaliaemoi knigi: ');
                       readln(B);
                       if (b>j) or (b<1) then begin
                          writeln('takogo nomera v spiske net');
                          writeln('poprobuite v sleduushii raz');
                          readln;
                       end;
                 until (b<=j) and (b>=1);
                 repeat
                       clrscr;
                       writeln('ЪДДДДДВДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДВДДДДДДДї');
                       writeln('і     і        FIO       і        name      і  cena і');
                       writeln('ГДДДДДЕДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДЕДДДДДДДґ');
                       with opis^[b] do
                            writeln('і  ', b ,'  і ',FIO:15, '  і ',name:15,'  і ',cena:6:2,'і');
                       writeln('АДДДДДБДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДБДДДДДДДЩ');
                       writeln;
                       writeln('vi tochno hotite udalit etot element (y/n)');
                       readln(l);
                 until (l='y') or (l='n');
           until l='y';
           for i:=1 to j do begin
               if i=b then begin
                  n:=n-1;
                  j:=j-1;
                  for c:=d[i] to n do
                      book^[c]:=book^[c+1];
                  for i:=b to j do begin
                      opis^[i]:=opis^[i+1];
                      d[i]:=d[i+1]-1;
                  end;
               end;
           end;
           clrscr;
           writeln ('element udalen');
           readln;
     until l='n'
end;
procedure menu;
var
   i:integer; l,y,ch:char;
procedure men (var i:integer);
begin
     writeln('spisok knig');
     writeln('1-sozdati spisok');
     writeln('2-dobavit knigu');
     writeln('3-prosmotret spisok');
     writeln('4-poisk po cene i udalenie');
     writeln('0-vihod');
     writeln;
     write(': ');
     readln(i);
end;
begin
     repeat
           clrscr;
           men(i);
           case i of
                1:sozd(n,book);
                2:add(book,n);
                3:vivod(n,book);
                4: begin
                        poisk(book,n,opis,j,d);
                        delet(j,vivod,opis,d,k,n,book);
                   end;
                0:halt;
           else begin
                writeln ('net takoi komandi');
                writeln ('viberete druguu');
                end;
           end;
           readln;
     until i=0;
end;
{F-}
begin
     clrscr;
     menu;
     dispose(book);
     dispose(opis);
end.




Проблема:
Необходимо программу переделать с использованием связного списка
(но не через object)

С теми же операциями над базой данной:
- создание списка
- добавление в список
- нахождение по цене
- удаление элемента по номеру

Буду признателен за помощь, очень надо!
Спасибо!

Сообщение отредактировано: Oleg_Z - 1.06.2005 22:32
 К началу страницы 
+ Ответить 
Altair
сообщение 1.06.2005 22:33
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

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


FAQ: Односвязные динамические списки


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

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