Консультация № 171569
24.08.2009, 07:32
0.00 руб.
0 8 2
Здравствуйте уважаемые эксперты! Помоги пожалуйста мне с практикой!
1)Создать файл,содержащий сведения о месячной зарплате рабочих завода.Каждая запись содержит поля-фамилия рабочего,наименование цеха,размер зарплаты за месяц.Кол-во записей-25. Как понять это задание? Объясните пожалуйста как его делать? Что означает 25 записей? В эту программу должно вкладываться текст 25 записями как я понел? Я не понимаю Pascal... Заранее спасибо=)

Обсуждение

Неизвестный
24.08.2009, 10:29
общий
Здесь возможны два варианта:
1) максимальное число записей равно 25. В этом случае объявляется массив из 25 записей. Посмотрите примеры выполнения заданий - в этом случае должна быть строка типа
Код:
VAR
MyArray: array [1..25] of TRecord;

2) объем хранимой информации большой, но нужно внести 25 записей в него. В этом случае используются динамические массивы (списки, ....).
В этом случае задание находится в разделе "Указатели".
Посмотрите примеры к разделу и опишите.
Неизвестный
24.08.2009, 10:34
общий
А что мне нужно сделать? 25 записей это фамилий я так думаю?
Неизвестный
24.08.2009, 11:26
общий
это ответ
Здравствуйте, Ramis.

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

Для представления информации в программе используем тип данных "запись" (record). Вот ее вид:
Код:

TWorker = Record { Запись о рабочем }
fio : string; { ФИО рабочего }
shop : string; { Наименование цеха }
money : Word; { Размер зарплаты за месяц }
end;

Надеюсь, что тут все понятно.
Далее, нужно из этих записей создать файл. В языке Паскаль существует тип данных "структурированный файл". Этот тип позволяет описать файл, состоящий из элементов одного и того же типа. В данной задаче нужно описать файл, состоящий из элементов типа TWorker. Вот как это описывается: TPlantFile = file of TWorker.

После того, как описаны указанные типы, остальное не представляет особой сложности.
Задаем константу, соответствующую указанному количеству записей.
Вводим переменные: f - для работы с типизированным файлом, w - для ввода информации о рабочем, i - для счетчика цикла.

Также задаем константу для инициализации информации о рабочем (если не использовать инициализацию, то в файле может оказаться мусор в случае ввода более короткой строки после длинной).

Создаем требуемый файл, открывая его на запись: Assign (f, fname); Rewrite (f)
Организуем цикл со счетчиком, в котором запрашиваем информацию об очередном рабочем. При вводе заполняются соответствующие поля записи. С помощью процедуры write (f, w) внесенная информация сохраняется в файле.
Цикл повторяется указанное число раз (25). Соответственно, в файле должны сохраниться 25 записей.

Командой close (f) файл закрывается, производя физическое сохранение информации на диске.


В приложении - вариант решения задачи.


Приложение:
Program Plant;
{
Создать файл, содержащий сведения о месячной зарплате рабочих завода.
Каждая запись содержит поля - фамилия рабочего, наименование цеха, размер зарплаты за месяц.
Кол-во записей - 25
}

Const
cMaxRec = 25; { Максимальное количество записей в файле }
fname = 'plant.dat' { Имя файла для сохранения сведений }

Type
TWorker = Record { Запись о рабочем }
fio : string; { ФИО рабочего }
shop : string; { Наименование цеха }
money : Word; { Размер зарплаты за месяц }
end;

TPlantFile = file of TWorker; { Файл с информацией о рабочих завода }

Const
{ Пустая запись для инициализации перед вводом }
cEmptyWorker : TWorker = (fio : ''; shop : ''; money : 0);

Var
f : TPlantFile;
w : TWorker;

i : Byte;

Begin
{ Создаем файл }
{$I-}
Assign (f, fname); Rewrite (f);
{$I+}
if IOResult <> 0 then begin
writeln ('Не могу создать файл!');
Halt (1);
end;

{ Запрашиваем необходимое количество записей }
for i := 1 to cMaxRec do
begin
w := cEmptyWorker; { инициализируем запись (иначе в файле может появиться "мусор" }

writeln;
write ('Фамилия рабочего -> '); readln (w.fio);
write ('Наименование цеха -> '); readln (w.shop);
write ('Размер з/пл за месяц -> '); readln (w.money);

{ сохраняем запись в файле }
write (f, w);
end;

{ Закрываем файл }
close (f);
End.
5
Спасибо вам большое...За отведеное вами время
Неизвестный
24.08.2009, 14:24
общий
А если я вам дам к примеру 25 записей рабочих,вы мне поможите составить программу..Пожалуйста помогите я не смыслю в Pascale
Неизвестный
24.08.2009, 14:41
общий
А вот и мой вариант. Посмотрите. Простейший вариант и без файлов
Код:
uses CRT;
CONST
w_max_count = 25;
{Объявляем тип единицы хранимой информации}
TYPE
TWorker = record
Name: String [20];
Workshop: String [20];
pay: Real;
end;


VAR
workers: array[1..w_max_count] of TWorker;
count: Integer; {текущее число записей}
i: Integer;
ch: Char;
s: String;

BEGIN
count := 0;
repeat
ClrScr;
WriteLn('Добавить новую запись: 1');
WriteLn('Вывести все: 2');
WriteLn('Завершить работу: 0');
WriteLn('------------------------------');
ch:=ReadKey;
case ch of
'1': if count = w_max_count then
WriteLn('База данных полная')
else begin
count := count + 1;
Write('Введите фамилию (20 символов): ');
ReadLn(s);
workers[count].name := copy(s, 1, 20);
Write('Введите название цеха (20 символов): ');
ReadLn(s);
workers[count].workshop := copy(s, 1, 20);
Write('Размер зарплаты: ');
repeat
ReadLn(s); {В два этапа на случай ошибочного ввода}
Val(s, workers[count].pay, i);
if i <> 0 then WriteLn('Ошибка. Попробуйте еще раз');
until i = 0;
end;
'2': if count = 0 then
WriteLn('База данных пустая')
else begin
for i:=1 to count do
WriteLn(i:2,') ',
workers[i].name,' ',
workers[i].workshop,' ',
workers[i].pay:10:2);
WriteLn('Нажмите любую клавишу ...'); ReadKey
end;
end;
until (ch = '0') or (ch = #27); {#27 = символ с номером 27 - Esc}
END.
Неизвестный
24.08.2009, 15:22
общий
это ответ
Здравствуйте, Ramis.
Записи - это комбинированный тип данных. Применяется для записи комбинации данных разных типов. Вот, например, в вашей задаче поля фамилия рабочего и наименование цеха - это строковый тип, а размер зарплаты - integer (целый).
В приложении приведен пример, как объявить записи в вашей задаче. А на сайтах www.pascal.helpov.net и http://forum.pascal.net.ru/ вы найдете много полезной информации и примеров.

Приложение:
type zavod=record
fio: string[45]; {фамилия}
name_of_fabric: string[45]; {название завода}
zarplata: integer; {размер зарплаты}
end;
var t1: zavod; {теперь, чтобы получить доступ к полям записи zavod, надо записать: t1.fio, t1.name_of_fabric, t1.zarplata}
5
Спасибо за ваш ответ...Я так и не понел..Но все равно спасибо за отведеное вами время
Неизвестный
26.08.2009, 09:14
общий
Спасибо вам большое за ответы....Ну я так и ни чего и не понел...Спасибо большое что вы есть.
Неизвестный
26.08.2009, 11:37
общий
Так спроси, что не понял - заранее трудно предусмотреть все вопросы
Форма ответа