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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2012, 11:06   #1
Camelot_2012
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 90
Печаль Программа на TurboPascal с меню и процедурами (Ребята, исправьте ошибку)

Код:
program svet_menu;
uses crt;
var c:char;
g:integer;

procedure press(c:char;var g:integer);
var g1:integer;
s:array[1..5] of string;
begin
s[1]:=' Naiti razdel v kotorom bolshe vsego knig ';
s[2]:=' Iz zadannogo razdela zanesti v fail svedeniya o vseh ego knigah ';
s[3]:=' Ydalit svedeniya o knigah god izdaniya kotorih menshe zadannogo ';
s[4]:=' Obespechit prosmotr faila v tablichnom vide ';
s[5]:=' Vihod ';
g1:=g;
if c=#80 then
begin
g:=g+1;
if g>5 then
g:=1;
end;
if c=#72 then
begin
g:=g-1;
if g<1 then
g:=5;
end;
if (c=#80) or (c=#72) then
begin
textbackground(0);
textcolor(15);
gotoxy(1,g);
writeln(s[g]);
textbackground(15);
textcolor(0);
gotoxy(1,g1);
writeln(s[g1]);
end;
end;

begin
repeat
clrscr;
g:=1;
textbackground(0);
textcolor(15);
Writeln(' Naiti razdel v kotorom bolshe vsego knig ');
textbackground(15);
textcolor(0);
Writeln(' Iz zadannogo razdela zanesti v fail svedeniya o vseh ego knigah ');
Writeln(' Ydalit svedeniya o knigah god izdaniya kotorih menshe zadannogo ');
Writeln(' Obespechit prosmotr faila v tablichnom vide ');
Writeln(' Vihod ');
repeat
c:=readkey;
press(c,g);
until c=#13;

case g of

1:begin 
clrscr;
procedure z1;
var f:file of book;
b:book;smax,g,s,k,max:integer;
begin
assign(f,'catalog.dat');
writeln('Razdel v kotorom bolshe vsego knig');
reset(f);
k:=0;
max:=0;
while k<filesize(f) do
begin
seek(f,k);
read(f,b);
s:=b.raz;
k:=k+1;
seek(f,0);
g:=0;
while not eof(f) do
begin
read(f,b);
if s=b.raz then
g:=g+1;
end;
if max<g then
begin
max:=g;
smax:=s;
end;
end;
writeln(smax);
close(f);
end;
writeln('Nazhmite Esc dlya vhoda v glavnoe menu');
repeat
c:=readkey;
until c=#27;
end;

2:begin
clrscr;
procedure z2;
var f,f1:file of book;
b:book;k:integer;
begin
assign(f,'catalog.dat');
writeln('Zanesti svedeniya o knigah v zadanom razdele');
writeln('Vvedite razdel');
read(k);
assign(f1,'data.dat');
rewrite(f1);
reset(f);
while not eof(f) do
begin
read(f,b);
if b.raz=k then
write(f1,b);
end;
close(f);
close(f1);
end;
writeln('Nazhmite Esc dlya vhoda v glavnoe menu');
repeat
c:=readkey;
until c=#27;
end;

3:begin
clrscr;
procedure z3;
var f,f1,f2:file of book;
b:book;g:integer;
begin
assign(f,'catalog.dat');
assign(f1,'data.dat');
writeln('Ydalit iz faila sved o knigah god izdaniya kotorih menshe zadannogo');
writeln('Vvedite god');
read(g);
assign(f2,'del.dat');
rewrite(f2);
reset(f1);
while not eof(f1) do
begin
read(f1,b);
if b.god>=g then
write(f2,b);
end;
close(f1);
close(f2);
rewrite(f1);
reset(f2);
while not eof(f2) do
begin
read(f2,b);
write(f1,b);
end;
close(f1);
close(f2);
erase(f2);
end;
writeln('Nazhmite Esc dlya vhoda v glavnoe menu');
repeat
c:=readkey;
until c=#27;
end;

4:begin
clrscr;
procedure z4;
var f,f1:file of book;
b:book;
begin
assign(f,'catalog.dat');
assign(f1,'data.dat');
writeln('Prosmotr v tabl forme(f)');
reset(f);
while not eof(f) do
begin
read(f,b);
writeln('Razdel: ',b.raz,'; Avtor: ',b.avt,'; Nazvanie: ',b.naz,'; God: ',b.god);
end;
close(f);
writeln;
writeln('Prosmotr v tabl forme(f1)');
reset(f1);
while not eof(f1) do
begin
read(f1,b);
writeln('Razdel: ',b.raz,'; Avtor: ',b.avt,'; Nazvanie: ',b.naz,'; God: ',b.god);
end;
close(f1);
end;
writeln('Nazhmite Esc dlya vhoda v glavnoe menu');
repeat
c:=readkey;
until c=#27;
end;
end;
until g=5;
clrscr;
writeln('Programma zavershena!');
end.
procedure z1;
Ожидался оператор, остальные процедуры также.

Последний раз редактировалось Camelot_2012; 13.06.2012 в 11:09.
Camelot_2012 вне форума Ответить с цитированием
Старый 13.06.2012, 11:33   #2
Last
В прострации
Форумчанин
 
Регистрация: 13.01.2009
Сообщений: 239
По умолчанию

Что по Вашему должна делать procedure z1?
Пол-жизни сидючи, в монитор глядючи...
Last вне форума Ответить с цитированием
Старый 13.06.2012, 11:38   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

процедуры (как и функции) описываются в ЗАГОЛОВОЧНОЙ части (ну, грубо говоря, там же, где описываются типы, переменные и т.д.)
а в тексте программы должен быть только ВЫЗОВ этих процедур (функций)

примерно так (логику/алгоритм не смотрел):
Код:
procedure z1;
var f: file of book;
  b: book; smax, g, s, k, max: integer;
begin
  assign(f, 'catalog.dat');
  writeln('Razdel v kotorom bolshe vsego knig');
  reset(f);
  k := 0;
  max := 0;
  while k < filesize(f) do
  begin
    seek(f, k);
    read(f, b);
    s := b.raz;
    k := k + 1;
    seek(f, 0);
    g := 0;
    while not eof(f) do
    begin
      read(f, b);
      if s = b.raz then
        g := g + 1;
    end;
    if max < g then
    begin
      max := g;
      smax := s;
    end;
  end;
  writeln(smax);
  close(f);
end;

procedure z2;
var f, f1: file of book;
  b: book; k: integer;
begin
  assign(f, 'catalog.dat');
  writeln('Zanesti svedeniya o knigah v zadanom razdele');
  writeln('Vvedite razdel');
  read(k);
  assign(f1, 'data.dat');
  rewrite(f1);
  reset(f);
  while not eof(f) do
  begin
    read(f, b);
    if b.raz = k then
      write(f1, b);
  end;
  close(f);
  close(f1);
end;


begin
  repeat
    clrscr;
    g := 1;
    textbackground(0);
    textcolor(15);
    Writeln(' Naiti razdel v kotorom bolshe vsego knig ');
    textbackground(15);
    textcolor(0);
    Writeln(' Iz zadannogo razdela zanesti v fail svedeniya o vseh ego knigah ');
    Writeln(' Ydalit svedeniya o knigah god izdaniya kotorih menshe zadannogo ');
    Writeln(' Obespechit prosmotr faila v tablichnom vide ');
    Writeln(' Vihod ');
    repeat
      c := readkey;
      press(c, g);
    until c = #13;

    case g of

      1: begin
          clrscr;
          z1;
          writeln('Nazhmite Esc dlya vhoda v glavnoe menu');
          repeat
            c := readkey;
          until c = #27;
        end;

      2: begin
          clrscr;
          z2;
          writeln('Nazhmite Esc dlya vhoda v glavnoe menu');
          repeat
            c := readkey;
          until c = #27;
        end;
и т.д...

p.s. и ещё, код очень рекомендую форматировать!
хотя бы так, как это сделал я!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.06.2012, 12:09   #4
Camelot_2012
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 90
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
процедуры (как и функции) описываются в ЗАГОЛОВОЧНОЙ части (ну, грубо говоря, там же, где описываются типы, переменные и т.д.)
а в тексте программы должен быть только ВЫЗОВ этих процедур (функций)

примерно так (логику/алгоритм не смотрел):
Код:
procedure z1;
var f: file of book;
  b: book; smax, g, s, k, max: integer;
begin
  assign(f, 'catalog.dat');
  writeln('Razdel v kotorom bolshe vsego knig');
  reset(f);
  k := 0;
  max := 0;
  while k < filesize(f) do
  begin
    seek(f, k);
    read(f, b);
    s := b.raz;
    k := k + 1;
    seek(f, 0);
    g := 0;
    while not eof(f) do
    begin
      read(f, b);
      if s = b.raz then
        g := g + 1;
    end;
    if max < g then
    begin
      max := g;
      smax := s;
    end;
  end;
  writeln(smax);
  close(f);
end;

procedure z2;
var f, f1: file of book;
  b: book; k: integer;
begin
  assign(f, 'catalog.dat');
  writeln('Zanesti svedeniya o knigah v zadanom razdele');
  writeln('Vvedite razdel');
  read(k);
  assign(f1, 'data.dat');
  rewrite(f1);
  reset(f);
  while not eof(f) do
  begin
    read(f, b);
    if b.raz = k then
      write(f1, b);
  end;
  close(f);
  close(f1);
end;


begin
  repeat
    clrscr;
    g := 1;
    textbackground(0);
    textcolor(15);
    Writeln(' Naiti razdel v kotorom bolshe vsego knig ');
    textbackground(15);
    textcolor(0);
    Writeln(' Iz zadannogo razdela zanesti v fail svedeniya o vseh ego knigah ');
    Writeln(' Ydalit svedeniya o knigah god izdaniya kotorih menshe zadannogo ');
    Writeln(' Obespechit prosmotr faila v tablichnom vide ');
    Writeln(' Vihod ');
    repeat
      c := readkey;
      press(c, g);
    until c = #13;

    case g of

      1: begin
          clrscr;
          z1;
          writeln('Nazhmite Esc dlya vhoda v glavnoe menu');
          repeat
            c := readkey;
          until c = #27;
        end;

      2: begin
          clrscr;
          z2;
          writeln('Nazhmite Esc dlya vhoda v glavnoe menu');
          repeat
            c := readkey;
          until c = #27;
        end;
и т.д...

p.s. и ещё, код очень рекомендую форматировать!
хотя бы так, как это сделал я!
Напиши, пожалуйста, до конца программу, за ранее благодарен.
Camelot_2012 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ребята...программа с модулем, процедурами, функциями и графикой. не могу найти максимальное и минимальное значение в массиве... Smirnov Паскаль, Turbo Pascal, PascalABC.NET 0 22.05.2012 13:09
Исправьте ошибку 15104 Общие вопросы C/C++ 2 06.10.2011 11:07
Исправьте ошибку.С# Tase4ka Помощь студентам 8 12.02.2011 14:09
Исправьте ошибку kipapsih Помощь студентам 0 07.01.2011 20:19
Ввод из файла,меню,матрицы turbopascal. Amenus Помощь студентам 2 17.06.2009 22:33