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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2009, 00:05   #1
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию Задача на Паскале по работе с типизированными файлами

Разработать программу ведения файла, содержащего некоторые данные. Сведения о приборах в лаборатории
инвентарный номер;
наименование прибора;
назначение;
дата изготовления;
цена.
В программе должны быть реализованы следующие функции:
ввод записей;
корректировка записей;
удаление записей;
просмотр записей на экране.
Требуемая функция выбирается с помощью меню.

Ребята, помогите пожалуйста. Нужно срочно. Не знаю как написать....
Ake вне форума Ответить с цитированием
Старый 13.02.2009, 00:28   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Это набросок. Думаю, дальше сами сможете.
Код:
type pribor = record
number : integer;  { порядковый номер }
id : integer;  {инвентарный номер }
naznach : string;  { назначение }
dateYear : integer; {дата изготовления: год}
dateMounth : integer; { дата изготовления: месяц }
dateDay : integer; {дата изготовления: день}
cena : real;  { цена }
end;

var pribors : array[1..10] of pribor; { pribors - массив из 10 приборов }
f : file of pribor; {-- файл с записями. Думаю, лучше сделать типизированным --}
i,NMAX : integer;
{...............}

procedure vvod(num : integer);  {num - номер записи }
begin
with pribors[num] do
 begin
 number := num;
 { -- здесь вводите остальные элементы, проверяя их корректность --}
 end;
end;

procedure delpribor(num : integer);  { удаление прибора с номером num }
var i : integer;
begin
{-- Можно очистить поля --}
for i:=num to NMAX do   { NMAX - количество приборов }
 begin
 pribors[i].number := pribors[i+1].number;
 { -- также с остальными элементами --}
 dec(NMAX);  {-- теперь приборов на 1 меньше --}
 end;
end;
{------------}
procedure prosmotr(num : integer);  { --просмотр записи с номером num --}
begin
with pribors[i] do
 begin
 writeln('Номер записи: ',number);
 writeln('Инвентарный номер:', id);
 {-- также выводите остальные элементы --}
 end;
end;
{.....................}
begin
{ -- программа --}
assign(f,'<имя файла>');
reset(f);  {-- лучше добавить проверку (IOResult) --}
read(f,NMAX);   {-- пусть первый элемент хранит число записей --}
for i:=1 to NMAX do
begin
read(f,pribors[i]);
end;
{.................}
end.
В общих чертах будет выглядеть как-то так.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.02.2009, 00:51   #3
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию

спс, буду дорабатывать. обращусь если возникнут проблемы.
Ake вне форума Ответить с цитированием
Старый 14.02.2009, 00:08   #4
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию

а можно кусок кода где будет корректировка записей??

и еще немного непонятно в процедуре удаления
pribors[i].number := pribors[i+1].number;
{ -- также с остальными элементами --}
это как??
Ake вне форума Ответить с цитированием
Старый 14.02.2009, 00:16   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Ake
а можно кусок кода где будет корректировка записей??
А как вы хотите их редактировать? Полностью переписывать все элементы, или выборочно? Если выборочно, то как-то так:

Код:
procedure pedit(num : integer; numel : integer);
begin
case numel of
 1 : begin
    writeln('Текущее значение: id=',pribors[num].id);
    writeln('Новое значение:');
    readln(pribors[num].id);
     end;
 2 : begin
    {-- То же для naznach --}
     end;
  3 : {.........................}
  { --- И для остальных элементов --}

 end;

end;
-----------------
Цитата:
и еще немного непонятно в процедуре удаления
pribors[i].number := pribors[i+1].number;
{ -- также с остальными элементами --}
это как??
Ну то есть
Код:
pribors[i].number := pribors[i+1].number;
pribors[i].id := pribors[i+1].id;
pribors[i].naznach := pribors[i+1].naznach;
{-- И так далее --}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 14.02.2009, 02:03   #6
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию

Program lab;
Uses crt;
type pribor = record
number : integer; { порядковый номер }
id : integer; {инвентарный номер }
naimen: string;
naznach : string; { назначение }
dateYear : integer; {дата изготовления: год}
dateMounth : integer; { дата изготовления: месяц }
cena : real; { цена }
end;

var pribors : array[1..20] of pribor; { pribors - массив из 20 приборов }
f : file of pribor; {-- файл с записями--}
i,NMAX : integer;
name_in: string;
option: word;
{...............}

procedure vvod(num : integer); {num - номер записи }
begin
with pribors[num] do
begin
number := num;
writeln('vvedite inventarnui nomer: ');
readln(id);
writeln('naimenovanie: ');
readln(naimen);
writeln('naznachenie: ');
readln(naznach);
writeln('god izgotovleniya: ');
readln (dateYear);
writeln('Cena: ');
readln(cena)
end;
end;

procedure delpribor(num : integer); { удаление прибора с номером num }
var i : integer;
begin
for i:=num to NMAX do { NMAX - количество приборов }
begin
pribors[i].number := pribors[i+1].number;
pribors[i].id := pribors[i+1].id;
pribors[i].naznach := pribors[i+1].naznach;
pribors[i].naimen:= pribors[i+1].naimen;
{ -- также с остальными элементами --}
dec(NMAX); {-- теперь приборов на 1 меньше --}
end;
end;

procedure pedit(num : integer; numel : integer);
begin
writeln('vuderite nomer dlia redakt, 1- invent nomer,');
writeln(' 2 - nazn-e, 3 - naimenovanie, 4 - data, 5 - cena');
begin
case numel of
1 : begin
writeln('tekuchee zn-e: id=',pribors[num].id);
writeln('novove zn-e=: ');
readln(pribors[num].id);
end;
2 : begin
Writeln( 'tekuchee zn-e: naznach=', pribors[num].naznach);
Writeln('novoe zn-e: ');
Readln(pribors[num].naznach);
end;
3 : begin
Writeln('tekuchee zn-e: naimenovanie=', pribors[num].naimen);
Writeln('novoe zn-e: ');
Readln(pribors[num].naimen);
End;
4: begin
Writeln('tekuchee zn-e: data=', pribors[num]. dateYear);
Writeln('novoe zn-e: ');
Readln(pribors[num]. dateYear);
End;
5: begin
Writeln( 'tekuchee zn-e: cena=', pribors[num].cena);
Writeln('novoe zn-e: ');
Readln(pribors[num].cena);
end;
end;
{------------}
procedure prosmotr(num : integer); { --просмотр записи с номером num --}
begin
with pribors[i] do
begin
writeln('nomer zapisi: ',number);
writeln('inventarn nomer: ', id);
writeln('Naimenovanie: ', naimen);
writeln('Naznachenie: ', naznach);
writeln('godizgotovleniya: ',dateYear);
writeln('cena: ', cena);
end;
end;
{.....................}
begin
{ -- программа --}
Writeln('vvedite imia faila');
Readln(name_in);
assign(f,name_in);
reset(f); {-- лучше добавить проверку (IOResult) --}
if ioresult <> 0 then begin
writeln ('fail', name_in, 'ne naiden'); exit end;
read(f,NMAX); {-- пусть первый элемент хранит число записей --}
for i:=1 to NMAX do
begin
read(f,pribors[i]);
end;
textcolor(11);
writeln('1 - vvod zapisi, 2 - redact, 3 - udalenie, 4 - prosmotr, 5 - vuhod');
readln(option);
case option of
1: begin
writeln(' vvod zapisi: ');
readln(num);
vvod(num);
end;
2: begin
writeln('vvedite nomer dlia redact ');
readln(num);
pedit (num, numel);
end;
3: begin
writeln('vvedite nomer dlia udaleniya ');
readln(num);
delpribor (num);
end;
4: begin
writeln('vvedite nomer dlia prosmotra');
readln(num);
prosmotr (num);
end;
5: exit;
end;
writeln;
end;
end.



Добавляла изменения прямо в ваш код.
при компиляции в этом месте пишет 113(Error in statement) ошибку


procedure prosmotr(num : integer); { --просмотр записи с номером num --}
begin
with pribors[i] do
begin ...

посмотрите что не так. и есть ли другие ошибки?
Ake вне форума Ответить с цитированием
Старый 14.02.2009, 02:08   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А вы попробуйте так написать:
with pribors[num] do...
Цикла у вас тут нет, а вы по инерции переменную цикла i оставили.
А работаете с одним заданным значением...
mihali4 вне форума Ответить с цитированием
Старый 14.02.2009, 02:12   #8
Ake
Пользователь
 
Аватар для Ake
 
Регистрация: 12.02.2009
Сообщений: 22
По умолчанию

Не работает так. Все равно пишет ошибку((
Ake вне форума Ответить с цитированием
Старый 14.02.2009, 02:28   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Попробуйте закомментировать красное:
Код:
procedure prosmotr(num : integer); { --просмотр записи с номером num --}
begin
with pribors[i] do
begin
writeln('nomer zapisi: ',number);
writeln('inventarn nomer: ', id);
writeln('Naimenovanie: ', naimen);
writeln('Naznachenie: ', naznach);
writeln('godizgotovleniya: ',dateYear);
writeln('cena: ', cena);
end;
end;
Если так будет компилироваться, перебейте строку
with pribors[num] do
заново руками или скопируйте из процедуры procedure vvod.
mihali4 вне форума Ответить с цитированием
Старый 14.02.2009, 02:30   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В коде много ошибок (например, файл каждый раз только открывается только для чтения).. Исправляю.. Осталось немного.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите по работе с текстовыми файлами ЕвгениуS Помощь студентам 9 17.01.2010 15:10
Задача на Паскале работа с текстовыми файлами. StudUL Помощь студентам 3 21.12.2008 23:24
помогите с задачей на Delphi(с типизированными файлами) lyonya0111 Помощь студентам 2 20.06.2008 15:18
ошибка 105 (при работе с типизированными файлами) sdp Общие вопросы Delphi 8 11.07.2007 11:12