Консультация № 172270
17.09.2009, 14:51
0.00 руб.
0 15 1
Здравствуйте увожаемые эксперты, если кто может - прошу решить данную ниже задачу.....

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

Обсуждение

Неизвестный
17.09.2009, 16:00
общий
Ska4kov A U:
Добрый день, Ska4kov A U!
Можете уточнить, какой файл: text или file of records?
Неизвестный
17.09.2009, 16:06
общий
Цитата: 300647
что то вроде bibl.doc.....
Неизвестный
17.09.2009, 16:43
общий
leonid59:
ну нужно записывать в файл типa bibl.doc
Неизвестный
17.09.2009, 20:05
общий
Ув эксперты, идей нету?
Неизвестный
17.09.2009, 20:47
общий
В .doc довольно таки тяжело будет сохранить. Здесь врядли кто возьмется делать думаю вам сюда --> Решебник
Неизвестный
17.09.2009, 20:54
общий
Цитата: 274422
а что, очень большая разница в text или дос сохранить, я знаю прога оч длинная по записи(((
Неизвестный
17.09.2009, 21:13
общий
А Вы сами как думаете?
Язык Турбо Паскаль предлагает три вида сохранения в файл:
1)типизированные файлы,
2)текстовые файлы,
3)нетипизированные файлы.

Про каждый из них по отдельности можете почитать самостоятельно.
Неизвестный
18.09.2009, 17:25
общий
Цитата: 304819
а что, очень большая разница в text или дос сохранить, я знаю прога оч длинная по записи(((

Ну как вам сказать...
Вывод данных в текстовом формате не требует никаких дополнительных усилий от программиста, все уже сделано разработчиками языка. Более того, вывод в текстовый файл и вывод на экран отличаются только указанием дискриптора файла.
В случае формата doc (как я понимаю, это формат Microsoft Word) требуется формирование специального вида файла.
Файл в формате doc содержит не только сами данные, но и дополнительную информацию, требуемую для оформления этих данных. В общем, для создания файла в этом формате требуется очень большая работа. Скажем так, если программу с выводом в текстовый файл можно написать за пару часов, то на программу с выводом в файл doc потребуется не меньше недели плотной работы.
Неизвестный
18.09.2009, 20:18
общий
Цитата: 299557
хм - мы делали прогу подобную в группе за 40-50 минут с нуля, но она сохраняла данные в файл .doc, а выводила все в паскале....вот мне надо подобную (
Неизвестный
19.09.2009, 14:18
общий
Ska4kov A U:
Добрый день, Ska4kov A U! Чтобы все-таки как-то определиться, о каком типе файла идет речь, расскажите, сколько уже семестров Вы изучаете Pascal и какие лабораторные (темы) выполнены. Можете ли Вы выложить (пусть и с ошибками, неполный) текст программы, которую вы делали в группе?
Неизвестный
20.09.2009, 09:13
общий
Цитата: 300647
3 куср - 1-ый семестр сейчас...
Код:
program xxx;
user cet;
type books:record;
nomer:integer;
avtor:string[16];
nazv:string[30]:
index:integer;
end;
var booksfile: file of books;
recbooks:books;
i,j:integer;
Procedure sozd;
assign (booksfile, 'C:\8675\bibl.doc');
rewrite(booksfile);
with recbooks do
while true do
begin
writeln ('введите номер книги');
readln (nomer);
if nomer = 9999 then close (booksfile);
exit;
end;
writeln ('введите имя автора');
readln (avtor);
writeln (' ');
readln (nazv);
writeln (' ');
readln (index);
write (booksfile, recbooks);
end;
end;

Procedure OBR;
-ll-
procedure DOB;
-ll-
и концовка..
begin
while true do
begin
clrser;
writeln ('укажите режимы');
writeln('1:создание');
writeln('2: обработка');
writeln('3: добавление');
writeln('4: 'выХод');
readln (j);
case j of
1: sozd;
2: obr;
3: dob;
4: halt;
else
readln ('fatal error :P')
end;
end;
end.
вот как то так..
Неизвестный
20.09.2009, 12:16
общий
Ska4kov A U:
Ну вот и прояснилось...
Вас спрашивали, что за тип у вашего файла bibl.doc. Неужели вы считаете, что имя файла, которое дается вам на ваших занятиях должно что-то значить для тех, кто в глаза не видел ваших программ?
Де-факто сейчас расширение .doc означает файл Microsoft Word. О чем вам и написали, говоря, что вывод в данном формате очень трудоемкий.
Причем вас же в первом же сообщении данного форума спросили, что у вас за тип: text или file of records.
Вот описание из вашей программы:
booksfile: file of books;

Это означает, что вы должны использовать типизированный файл.
Разумеется, что в этом случае проблем с выводом записей в файл не возникает.
Неизвестный
20.09.2009, 14:16
общий
это ответ
Здравствуйте, Ska4kov A U.

Вот программа, выполняющая данные действия.

Приложение:
{
Программа создает на диске файл - ведомость успевающих учащихся класса,
в котором записана следущая информация:
- фамилия и имя учащегося
- название предмета
- оценки за две контрольные работы по трем предметам
Программа обеспечивает ввод , редактирование данных
и вывод списков учащихся, выполнивших первую работу по всем предметам на 5
}

Program Pupils;

Const
cSubjectNumber = 3;
cWorkBySubject = 2;

cFileName = 'pupils.dat';

Type
TName = string [20]; { ограниченный строковый тип для названий предметов и ФИО }
TMark = 0..5; { оценки: 0 - не писал; 1-5 - оценка за работу }

TWork = array [1..cWorkBySubject] of TMark; { список оценок за работы по предмету }

{ Тип для описания одного предмета: название + список оценок за работы }
TSubject = Record
title : TName;
works : TWork;
end;

TSubjectList = array [1..cSubjectNumber] of TSubject; { список предметов }

{ Тип для описания учащегося }
TPupil = Record
family : TName;
name : TName;
subjects : TSubjectList;
end;

TPupilFile = file of TPupil; { типизированный файл для хранения информации об учащихся }

Var
f : TPupilFile;

pupil : TPupil;

s : 1..cSubjectNumber;
w : 1..cWorkBySubject;

sel : Char;

{ Процедура очистки экрана }
Procedure ClrScr; assembler;
asm
mov ax, 3
int 10h
end;

{ Процедура очистки записи об учащемся }
Procedure ClearRecord;
begin
with pupil do
begin
family := '';
name := '';

for s := 1 to cSubjectNumber do
with subjects [s] do
begin
title := '';

for w := 1 to cWorkBySubject do
works [w] := 0;
end
end;
end;

{ Процедура вывода информации об учащемся }
Procedure PrintRecord;
begin
ClrScr;

with pupil do
begin
writeln ('Фамилия учащегося --> ', family);
writeln ('Имя учащегося --> ', name);

for s := 1 to cSubjectNumber do
with subjects [s] do
begin
writeln ('Название предмета --> ', title);

for w := 1 to cWorkBySubject do
writeln (' Оценка за ', w , '-ю контрольную --> ', works [w]);
end;
end;
end;

{
Функция ввода информации об учащемся
Возвращает true при корректном вводе
и false для окончания ввода
}
Function InputRecord : Boolean;

begin
ClrScr;
ClearRecord;

InputRecord := false;

with pupil do
begin
write ('Введите фамилию учащегося (точка - завершение ввода) --> '); readln (family);

if family = '.' then exit;

write ('Введите имя учащегося --> '); readln (name);

writeln ('Введите информацию о предметах:');
for s := 1 to cSubjectNumber do
with subjects [s] do
begin
write ('Название предмета --> '); readln (title);

for w := 1 to cWorkBySubject do
begin
write ('Оценка за ', w , '-ю контрольную --> '); readln (works [w]);
end;
end;
end;

InputRecord := true;
end;

{
Процедура редактирования записи
}
Procedure EditRecord;
var
answer : Char;

begin
ClrScr;

with pupil do
begin
writeln ('Учащийся: ', family, ' ', name);
write ('Изменить [Y/N]? '); readln (answer);
if answer in ['y', 'Y', 'д', 'Д'] then begin
write ('Введите фамилию учащегося --> '); readln (family);
write ('Введите имя учащегося --> '); readln (name);
end;

for s := 1 to cSubjectNumber do
with subjects [s] do
begin
writeln ('Название предмета --> ', title);
for w := 1 to cWorkBySubject do
writeln (' Оценка за ', w , '-ю контрольную --> ', works [w]);

write ('Изменить [Y/N]? '); readln (answer);
if answer in ['y', 'Y', 'д', 'Д'] then begin
write ('Введите новое название предмета --> '); readln (title);

for w := 1 to cWorkBySubject do
begin
write ('Оценка за ', w , '-ю контрольную --> '); readln (works [w]);
end;
end;
end;
end;
end;

{ Процедура создания файла }
Procedure Create;

begin
ClrScr;

{$I-}
Assign (f, cFileName); Rewrite (f);
{$I+}

if IOResult <> 0 then begin
writeln ('Не могу создать файл ', cFileName, '!');
halt (1);
end;

while InputRecord do write (f, pupil);

close (f);
end;

{ Процедура редактирования файла }
Procedure Edit;
var
recNum : Word;
answer : Char;
res : Boolean;

begin
ClrScr;

{$I-}
Assign (f, cFileName); Reset (f);
{$I+}

if IOResult <> 0 then begin
writeln ('Не могу открыть файл ', cFileName, '!');
halt (1);
end;

recNum := 0;
while not eof (f) do
begin
read (f, pupil);
Inc (recNum);
PrintRecord;

writeln;
write ('Желаете отредактировать запись [Y/N]? '); readln (answer);

if answer in ['y', 'Y', 'д', 'Д'] then begin
EditRecord;
Seek (f, recNum - 1);
write (f, pupil);
end;
end;

write ('Желаете добавить новые записи [Y/N]? '); readln (answer);

if answer in ['y', 'Y', 'д', 'Д'] then
while InputRecord do write (f, pupil);

close (f);
end;

{ Процедура поиска и вывода списка учащихся, выполнивших первую работу по всем предметам на 5 }
Procedure Search;
var
count : Word;
flag : Boolean;

begin
ClrScr;
count := 0;

{$I-}
Assign (f, cFileName); Reset (f);
{$I+}

if IOResult <> 0 then begin
writeln ('Не могу открыть файл ', cFileName, '!');
halt (1);
end;

with pupil do
while not eof (f) do
begin
read (f, pupil);

flag := true;

for s := 1 to cSubjectNumber do
if subjects [s].works [1] <> 5 then flag := false;

if flag then begin
writeln (family, ' ', name);
Inc (count);
end;
end;

writeln ('Всего ', count, ' учащихся');

close (f);

write ('Для продолжения нажмите Enter: '); readln;
end;

Begin
Repeat
ClrScr;

writeln;
writeln;
writeln (' Список действий');
writeln ('----------------------');
writeln;
writeln ('1 - создать файл');
writeln ('2 - редактировать файл');
writeln ('3 - выбрать отличников');
writeln;
writeln ('0 - завершить работу');
writeln;
write ('Выберите действие --> '); readln (sel);

case sel of
'1' : Create;
'2' : Edit;
'3' : Search;
end;
Until sel = '0';

ClrScr;
End.
5
Спасибо огромное, но преподаватель не обучал некоторым действиям в этой проге, написанной Вами, я шокирую препода))
Неизвестный
20.09.2009, 15:22
общий
Цитата: 299557
Спасибо Вам огромное!
давно
Старший Модератор
31795
6196
21.09.2009, 18:44
общий
Ska4kov A U:
Цитата: 304819
Спасибо огромное, но преподаватель не обучал некоторым действиям в этой проге, написанной Вами, я шокирую препода))

Вас смущает этот код:
Procedure ClrScr; assembler;
asm
mov ax, 3
int 10h
end;

Это стандартная процедура взятая из модуля CRT, она помимо установки нового (3-го текстового)режима ещё и очищает экран. Если Вы уже изучали(использовали) этот модуль, то просто подключите его, а саму процедуру удалите из кода, в коде Вы будете использовать одноименную процедуру модуля CRT. Всё остальное должно соответсвовать уровню Ваших знаний.
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа