Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ файлы, записи.

Автор: Евгения 7.06.2004 17:49

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

Код

____________________________________________________________________
ФИО               Лекции                Пpактики             Всего
             ________________________________________              
                 час          %         час       %          часов
____________________________________________________________________
fam             kol1         pr1        kol2      pr2         kol
____________________________________________________________________
В среднем                    -                     -           -
____________________________________________________________________

Прикрепленный файл  KURSOVIK.rar ( 3.14 килобайт ) Кол-во скачиваний: 500

Автор: Romtek 7.06.2004 17:54

В функции Proverka неверное определение существования файла.
Надо сделать так:

Код
function FileExists(str:string): boolean;
var
 ff: text;
begin
 assign(ff,str);
 {$I-}
 reset(ff);
 {$I+}
 if IORESULT=0 then
 begin
   close(ff);
   FileExists:=true;
 end
 else FileExists:=false;
end;


А не лучше ли было прикрепить архив с исходником?

Автор: Romtek 7.06.2004 21:22

Проверка на наличие фамилии в файле делается так:

Код
while not EOF(F) do
begin
 read(F, rec);
 if rec.fio=fio then
 begin
 {...}
 end;
end;

Автор: Altair 7.06.2004 22:02

в procedure SaveTable;
заменить

Код
TextColor(red);
Writeln('Фаил таблицы:');
NAME:='';
WHILE NAME='' DO readln(name);


на

Код
TextColor(red);
Writeln('Фаил таблицы:');
readln(name);

Автор: Евгения 7.06.2004 22:07

Спасибо... rolleyes.gif

Автор: Romtek 7.06.2004 22:31

Здесь ещё уйму чего можно делать.

Автор: Romtek 7.06.2004 22:55

Дальше:
выводится только последняя запись, т.к. ты просто выводишь за пределами цикла

Автор: Romtek 7.06.2004 23:12

Чуть лучше smile.gif


Прикрепленные файлы
Прикрепленный файл  kursovik2.zip ( 3.89 килобайт ) Кол-во скачиваний: 212

Автор: Евгения 8.06.2004 0:36

Пасябки.. А я тут уснула не надолго.... :p2:

Автор: Romtek 8.06.2004 1:17

Вот ещё обновлённый вариант.
Может и не последний.

Но на сегодня точно хватит!


Прикрепленные файлы
Прикрепленный файл  kursovik3.zip ( 3.86 килобайт ) Кол-во скачиваний: 214

Автор: Студент 8.06.2004 1:20

ХВАТИТ ЗДЕСЬ ЛАЗАТЬ, УХОДИ!!!!!!!!!!!!!!

модератор
Еще один такой пост и Студент пойдет в баню...

Модератор 2 (Oleg_Z):
1. GLuk, подписывайся, тут 2 модера (про меня не забывай smile.gif )
2. А как ты его можешь забанить?
to СТУДЕНТ
GLuk прав!



1. Какая разница, думаю ты сделал бы тоже самое, в смысле с предупреждением.. (но впредь буду подписываться)
2. Никто не говорил, что буду его банить его буду именно я... ;)

Автор: Евгения 8.06.2004 14:03

Чтобы посчитать в среднем нужно поставить счетчик на количество фамилий и 2 переменные чтоб считали значеия количество лекций и практик ?
подскажите пожалуста как это правильнее сделать... :p2:

Автор: Romtek 8.06.2004 14:15

Count - кол-во преподов
Practice_Total - общее кол-во практик у всех преподов
Practice_Average - среднее кол-во практик у всех преподов

Код
Practice_Average:=Practice_Total/Count;
Theory_Average:=Theory_Total/Count;

Автор: Romtek 8.06.2004 16:31

В цикле (при считывании записей из файла) складываешь все практики, лекции и людей, потом делишь на кол-во тех самых людей.

Код
Practice_Total:=0;
Theory_Total:=0;
while Not EOF(F) do
begin
 read(F,rec);
 inc(Practice_Total, практик_у_препода); { inc(k,n);  <=>  k:=k+n; }
 inc(Theory_Total, лекций_у_препода);
 inc(Count);
 {...}
end;
Practice_Average:=Practice_Total/Count;
Theory_Average:=Theory_Total/Count;

Автор: Евгения 8.06.2004 16:33

Спасибочкиsmile.gif))))

Автор: Евгения 10.06.2004 3:31

Помгите пожалуйста исправить 2 бага.. Срок сдачи через 5 часов

Один при сохранении в файл теряется среднее значение (kol1_average и kol2_average), в таблицу вносятся нули...

Второй как правильно сделать ограничение...

Исходник прилагаю...


Прикрепленные файлы
Прикрепленный файл  ________.rar ( 3.95 килобайт ) Кол-во скачиваний: 223

Автор: Altair 10.06.2004 11:09

первый глюк попробуй исправить так

Цитата
Writeln(TXT);
      Writeln(TXT, translate(' ‚ бpҐ¤­Ґ¬:'),
    kol1_Average:5:1,kol2_average:26:1);

Это надо изменить. убери первую строку writeln(txt);
или замени ее на writeln(txt,' ');
второй оператор тоже какой-то навороченный, у меня нет сейчас компилера, не могу проверить, но мне кажется это из-за него теряется значение, разбей его на несколько вот так:
Цитата
write(txt,translate(' ‚ бpҐ¤­Ґ¬:')); 
и так далее, т.е. на более простые.
А какие проблеммы с ограничением?

Автор: Romtek 10.06.2004 14:32

Oleg_Z , эту прогу я уже помог доделать. Курсовик Евгения
уже может даже сдала.


ОК. Я не знал.

Автор: Евгения 11.06.2004 17:46

Огромное спасибо Romtek

Сегодня сдала курсовик на 4.. почему на 4?
Преод просто повредничала и сказала, что у меня используется много функций которые она не давала

Автор: Romtek 11.06.2004 19:00

Я рад был помочь. smile.gif

Цитата(Евгения)
Преод просто повредничала и сказала, что у меня используется много функций которые она не давала
Она просто дура blink.gif
Так НАДО программировать.

Кстати, ты хотела, чтобы я тебе пояснил некоторые вещи по курсовику. Желательно, чтобы ты их понимала.

Автор: Werwolf86 13.06.2004 18:04

Чистый шестой фак господа! :D