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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2011, 19:38   #1
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
Восклицание Доделать в Паскале задание на записи

Добрый день/вечер всем программистам.У меня такая просьба.Надо доделать код к заданию.
Вот задание

Cоздать программу для ввода, вывода, стирания(удаления) записей,а также для поиска по названию и для упорядочению по автору.

данные по дискам:
-автор
-название
-издатель
-год издания
-цена(ЛС,т.е. в латах)
-посчитаннаяценность-возраст(в полных годах) (как я понимаю ценность этогопредмета,товара)

преподователь написала мне, что не выведены названия команд и поэтому нельзя понять, что происходит

т.е. как я понимаю этого либо в коде у меня нет, либо есть но не верно работает. буду благодарна всем,кто сможет доделать этот код по заданию,опирась на то так скажем замечание, на которое указала преподователь
Novenkaja вне форума Ответить с цитированием
Старый 25.06.2011, 19:39   #2
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

и вот код

Код:
program uzd_10;
    uses crt;
    type disk=record
            avtor:string[12];
            nazvanie:string[20];
            god:integer;
            izdatel:string[14];
            cena:real;
            cennost:byte;
        end;
        filter=record
            izdatel:string[14];
            counter:integer;
        end;
    disks=array[1..100] of disk;

//------------------------------------------------------------------------------
Procedure writeToFile(a:disks;size:integer);
    var F:text;
        i:integer;
Begin
    clrscr;
    writeln('ierakstam faila');
    Assign(F,'disk.txt');
    ReWrite(F);
    For i:=1 to size do
        with a[i] do
        WriteLn(F,avtor:12,' ',nazvanie:20,' ',izdatel:14,' ',god:4,' ',cena:4,' ',cennost:4);
    Close(F);
    WriteLn('Save');
    writeln('ieraskts faila ir beidzas');
    readkey;
End;
//------------------------------------------------------------------------------
Procedure delete(var A:disks;var N:integer);
    var number,i:integer;
Begin
    Write('Kakuju zapis udalit?');
 Readln(Number);
 If Number > N then writeln('Error')
 Else
 For i:=Number+1 to N do
 Begin
   A[i]:=A[i+1];
   Dec(n)
 End;

End;
//------------------------------------------------------------------------------
Procedure sortByAuthor(var A:disks;size:integer);
    var i,k:integer;
   buf:disk;
  Obmen:Boolean;
Begin
   k:=size;
  Repeat
    Obmen:=False;
    For i:=1 to k-1 do
    If A[i].avtor> A[i+1].avtor then
    Begin
      buf:=A[i];
      A[i]:=A[i+1];
      A[i+1]:=buf;
      Obmen:=True;
    End;
    dec(k)
  Until Not Obmen;
End;
//------------------------------------------------------------------------------
Procedure findMostPopular(A:disks;size:integer);
    var i,j,tmpSize,index:integer;
        B    :disks;
        C    :array[1..100] of filter;
        found:boolean;
        tmp  :string[14];
Begin
    clrscr;
    tmpSize:=0;
    for i:=1 to size do
        with A[i] do
        Begin
            found:=false;
            For j:=1 to tmpSize do
                if (izdatel= C[j].izdatel) then
                Begin
                    inc(C[j].counter);
                    found:=true;
                    break;
                End;
            if (found = false) then
            Begin
                inc(tmpSize);
                C[tmpSize].izdatel:=izdatel;
                C[tmpSize].counter:=0;
            End;
        End;

    j:=1;
    for i:=2 to tmpSize do
        if (C[j].counter < C[i].counter) then j:=i;

    tmp:=C[j].izdatel;
    tmpSize:=0;
    WriteLn('Samij popularnij izdatel: ', tmp);
    readkey;

    for i:=1 to size do
        if (tmp = A[i].izdatel) then
        Begin
            inc(tmpSize);
            B[tmpSize]:=A[i];
        End;

    if (tmpSize <>0) then writeToFile(B,tmpSize)
        else WriteLn('Spiska net!');
End;
//------------------------------------------------------------------------------
Procedure searh(A:disks;size:integer);
    var searchParam:string;
        i:integer;
Begin
    clrscr;
    Write('Vvesti nazvanie: ');
    ReadLn(searchParam);
    for i:=1 to size do
        with A[i] do
        if (searchParam = nazvenie) then
            Writeln(avtor,'    ',nazvanie,'     ',god,'      ',izdatel,'        ',cena,'     ',cennost);
End;
Novenkaja вне форума Ответить с цитированием
Старый 25.06.2011, 19:40   #3
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

это окончание кода

Код:
//------------------------------------------------------------------------------
Procedure adddisk(var A:disks;var size:integer);
Begin
    clrscr;
    inc(size);
    with a[size] do
    begin
        Write('avtor: ');
        ReadLn(avtor);
        Write('nazvanie: ');
        ReadLn(nazvanie);
        Write(izdatel      : ');
        ReadLn(izdatel);
        Write('God izdania   : ');
        ReadLn(god);
        Write('Cena  : ')  ;
        Readln(cena);
        Write('Cennost-vozrats : ');
        Readln(cennost);
    end;
End;
//------------------------------------------------------------------------------
Procedure retrieve(A:disks;size:integer);
    var i:integer;
Begin
    clrscr;
    writeln('      avtor nazvanie izdatel god Cena cennost');
    for i:=1 to size do
        with A[i] do
        begin
            WriteLn(avtor:12,' ',nazvanie:20,' ',izdatel:14,' ' ,god:4,' ',cena:4,' ',cennost:4);
        end;
    readkey;
End;
//------------------------------------------------------------------------------
Procedure printMenu;
Begin
    clrscr;
    WriteLn('------ Dannie po disku -------');
    WriteLn('1: Avtor');
    WriteLn('2: Nazvanie');
    WriteLn('3: Izdatel');
    WriteLn('4: God izdania');
    WriteLn('5: Cena');
    WriteLn('6: Cennost(vozrast)');
    WriteLn('0: Exit');
    WriteLn;
    Write('JVasa komanda: ');
End;
//------------------------------------------------------------------------------
    var A   :disks;
        key :char;
        size:integer;
begin
    Repeat
    printMenu;
    key:=readkey;
    Case key of
        #49:adddisk(A,size);
        #50:retrieve(A,size);
        #51:writeToFile(A,size);
        #52:findMostPopular(A,size);
    End;
  Until key=#48;

end.
Novenkaja вне форума Ответить с цитированием
Старый 25.06.2011, 23:13   #4
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

если кому-то не удобно работать с эти кодом,можете свой написать по этому заданию,опираясь на отзыв преподователя,чтобы это тоже было учтено.
но лучше было бы конечно,если бы этот код доделали,его же не надо весь менять,только доделать,а именно вписать в него то,на что указала преподователь в своём отзыве
буду очень благодарна всем
Novenkaja вне форума Ответить с цитированием
Старый 25.06.2011, 23:27   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так вроде ж понятно что не так, тем более если сами код писали)
Запускаем программу (кстати, там есть пара опечаток: в 1 месте nazvenie вместо nazvanie и ' где-то пропущена была) и видим
Цитата:
('------ Dannie po disku -------');
('1: Avtor');
('2: Nazvanie');
('3: Izdatel');
('4: God izdania');
('5: Cena');
('6: Cennost(vozrast)');
('0: Exit');
Причем тут это? Наверно должно быть что-то типа
Цитата:
1 — добавить запись
2 — просмотреть записи
3 — сохранить в файл
4 — найти самого популярного автора (или что там ищется)
0 — выход
И когда нажимаем 4 и выводится самый популярный издатель (в 2 и 3 тоже надо написать что-то вроде "нажмите любую клавишу для возвращения в главное меню"), то непонятно, что происходит после этого: какой-то save куда-то чего-то и т.д. (код не смотрел, я пользователь программы )
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 25.06.2011 в 23:36.
Alex11223 вне форума Ответить с цитированием
Старый 26.06.2011, 00:17   #6
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

спасибо и на этом,только можно как то по подробнее расписать,а то не совсем поняла.

те. всё это ('------ Dannie po disku -------');
('1: Avtor');
('2: Nazvanie');
('3: Izdatel');
('4: God izdania');
('5: Cena');
('6: Cennost(vozrast)');
('0: Exit');

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

те. вместо того,нужно напистаь вот это:
1 — добавить запись
2 — просмотреть записи
3 — сохранить в файл
4 — найти самого популярного автора (или что там ищется)
0 — выход
????

а в 2 и 3 писать
2 — просмотреть записи
3 — сохранить в файл
или "нажмите любую клавишу для возвращения в главное меню" ????
Novenkaja вне форума Ответить с цитированием
Старый 26.06.2011, 00:27   #7
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

мне кажется,что у меня не дописано в самом конце

begin
Repeat
printMenu;
key:=readkey;
Case key of
#49:adddisk(A,size);
#50:retrieve(A,size);
#51:writeToFile(A,size);
#52:findMostPopular(A,size);
End;
Until key=#48;


там где case

ведь по сути в runе работают только те процедуры,которые указаны под номерами этих решёток.
#49:adddisk(A,size);
#50:retrieve(A,size);
#51:writeToFile(A,size);
#52:findMostPopular(A,size);
Novenkaja вне форума Ответить с цитированием
Старый 26.06.2011, 00:38   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А вы вообще представляете что делает ваша программа?)
Цитата:
мне не писать???
писала для того и потому,что в задании говорится какие данные по диску должны быть,я их и выводила на экран,может только не совсем верно....
Вначале (судя по коду и названию функций) должно выводиться меню, в котором с помощью соответствующих клавиш пользователь выбирает что делать. Последнее реализовано, а вот вместо меню выводится непонятно что (мб этот текст должен был быть в каком-то другом месте, хотя по-моему он тут вообще не нужен).
Ну т.е. просто текст в этом меню не соответствует тому, что произойдет после выбора какого-либо пункта. Тоже самое, что написать "Огурцы" на мешке с картошкой.
Цитата:
а в 2 и 3 писать
2 — просмотреть записи
3 — сохранить в файл
или "нажмите любую клавишу для возвращения в главное меню" ????
Запустите программу и посмотрите как она работает (кроме того, что выше написано в этом сообщении). Нажали, например, кнопку 2 — вывелись все записи, ничего не происходит, программа не говорит пользователю что ему делать дальше и о том что для того, чтобы вернуться в меню надо нажать любую клавишу пользователю приходится догадываться самому)
Цитата:
работают только те процедуры,которые указаны под номерами этих решёток.
Ну да, но у вас вроде бы и нету других процедур. В любом случае текст в меню не соответствуют тому, что сделают это процедуры.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 26.06.2011 в 11:34.
Alex11223 вне форума Ответить с цитированием
Старый 26.06.2011, 11:05   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) Абсолютно согласен с Алексом (и Вашим преподавателем).
Меню программы (меню команд) должно отражать возможность управлять ДЕЙСТВИЯМИ, выполняемыми программой.
поля записи - это характеристики объекта и к ДЕЙСТВИЯМ они отношения не имеют!

2) примеры программ с нормальным меню Вы легко найдёте на форуме.
вот, навскидку темы, где есть программы с выбором действия:
http://www.programmersforum.ru/showthread.php?t=156494
http://www.programmersforum.ru/showthread.php?t=149755
http://www.programmersforum.ru/showthread.php?t=145518
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.06.2011, 18:41   #10
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

я примерно поняла,что вы имеете ввиду,однако всё равно не до конца поняла как именно и в каком(каких) месте(местах) что поменять и написать.

была бы очень признательна,если бы именно в тех местах,где нужно доработать-вы бы исправили,мне легче наглядно понять,чем по тексту и пытаться это отобразить в коде

на ссылках я посмотрела,где то даже поняла,но связать со своим не могу...

очень буду признательна если поможете,мне это задание очень важно и нужно доисправить...
потому что если его делать сначала,полностью заново,то думаю это будет ещё дольше....
Novenkaja вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доделать в Паскале задание на массив Novenkaja Помощь студентам 24 23.06.2011 20:35
Задание в Паскале через записи Novenkaja Помощь студентам 0 10.05.2011 21:14
Помогите доделать задание в паскале! neomaximus Помощь студентам 4 23.06.2008 18:16
Помогите доделать задание в паскале neomaximus Помощь студентам 5 23.06.2008 14:35
Помогите доделать задание в паскале! neomaximus Помощь студентам 1 22.06.2008 09:45