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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2011, 06:42   #1
DarkDeidara
Пользователь
 
Аватар для DarkDeidara
 
Регистрация: 30.11.2010
Сообщений: 18
По умолчанию Дозапись данных в файл

Дело обстоит так. Написал уже программу почти, осталось пару недочётов убрать и что главное нужно Рассчитанные данные дозаписать в созданный ранее другой(вспомогательной) программой файл. Исходный код конечно же имеется вспомогательная программа полностью рабочая мне нужна помощь только с дозаписью в основной программе.
Вот основная программа
Код:
program okladnik;
uses crt;
type sprav=record
     fio:string[30];
     tn:word;
     nc:integer;
     ok_p:string[12];
     po_s:string[12];
     kod_kat:word;
     oklad:real;
     kols:word;
     time:integer;
     kvo:array[1..10] of word;
     snv:array[1..10] of real;
     kwy:array[1..10] of word;
     cup:array[1..10] of real;
     end;
var tn,nb,i,j,x,l,p,otrch:integer;
    snar,ozpltar,knar:real;
    e:file of sprav;
    st:sprav;
    a:array[1..100] of integer;
    b:array[1..100] of integer;
    zpltar:array[1..100] of real;
    zplnar:array[1..100] of real;
begin
     clrscr;
     assign(e,'C:\Deidara\sprav.dei');
     writeln('Введите номер бригады:');
     readln(nb);
     writeln('Введите сумму наряда:');
     readln(snar);
     writeln('Введите табельные номера членов бригады:');
     i:=1;
     j:=1;
     p:=0;
     ozpltar:=0;
     repeat
           begin
                writeln('Вводить ниже:');
                readln(a[i]);
                reset(e);
                while not eof(e) do
                begin
                     read(e,st);
                     if st.tn=a[i] then
                     begin
                          p:=p+1;
                          if p=0 then
                          writeln('Такого табельного номера нет...')
                          else
                          if st.ok_p='окладник'then

                               writeln('Рабочий ',st.fio,' ',st.ok_p)

                          else
                               if st.ok_p='повременщик' then
                          begin
                               writeln('Рабочий ',st.fio,' включен в бриагду.');
                               writeln('Тариф: ',st.oklad:6:2);
                               writeln('Введите кол-во отработанных часов:');
                               readln(otrch);
                               zpltar[i]:=st.oklad*otrch;
                               ozpltar:=ozpltar+zpltar[i];
                               b[j]:=i;
                               i:=i+1;
                          end;
                     end;
                end;
                writeln('Продолжить? 1-да/2-нет.');
                readln(x);
                close(e);
           end;
           until x=2;
           l:=i;
 {   for i:=1 to l-1 do
     writeln(zpltar[i]:6:2);  }
     writeln('Общая сумма заработной платы по тарифу по всем членам бригады: ',ozpltar:6:2,' рублей.');
     knar:=snar/ozpltar;
     writeln('Сумма наряда в расчёте на 1 рубль: ',knar:10:6,' рублей.');
     i:=1;
     for i:=1 to l-1 do
     zplnar[i]:=knar*zpltar[i];
     reset(e);
     while not eof(e) do
     begin
          read(e,st);
          if st.tn=a[i] then
          begin
               st.kvo[i]:=1;
               st.snv[i]:=zplnar[i];
          end;
     i:=i+1;
     seek(e,b[j]);
     write(e,st);
     end;
     close(e);
readln;
end.
и вот её условие (мне нужна помощь с 7 пунктом) полный текст задачи в прикреплённых файлах
Программа доложна выполнять расчёт суммы оплаты членам бригады, исходя из общей суммы наряда, профессионального разряда и времени, отработанного работником по данному наряду.
Алгоритм рассчётов:
1.Ввести с клавиатуры № бригады и сумму наряда(это я сделал);
2.Ввести с клавиатуры табельные номера работников - членов бригады - запомнить их в массиве(тоже ввёл и занёс);
3.Для каждого введённого табельного номера:
...
6.Высчитать суммы заработной платы по наряду для каждого работника из бригады пропорционально суммам их заработной платы по тарифу, т.е. по формуле:
ZPLNAR=KNAR*ZPLTAR, где
ZPLTNAR - заработная плата по наряду члена бригады
KNAR - сумма наряда в расчёте на 1 рубль общей заработной платы по тарифу
ZPLTAR - сумма заработной платы по тарифу члена бригады.
7.Рассчитанные суммы заработной платы по наряду поместить в записи по работникам - членам бригады - с кодом вида оплат: 1-сдельная оплата.
Кроме того, до выполнения перечисленные основных действий, необходимо отдельной программой или в дополнительном режиме создать и ввести данные в файлы "SPRAV" и "TN" и "SVO".

Собственно вспомогательная программа и создаёт эти дополнительные файлы

Кто чем может посоветуйте)

Так же исходники прикрепил
если не понятно условие или то что мне нужно тоже спрашивайте)
Вложения
Тип файла: rar Исходники.rar (3.8 Кб, 7 просмотров)
Тип файла: txt задача.txt (1.9 Кб, 120 просмотров)
DarkDeidara вне форума Ответить с цитированием
Старый 17.05.2011, 09:23   #2
Swarog
Форумчанин
 
Аватар для Swarog
 
Регистрация: 26.01.2010
Сообщений: 215
По умолчанию

если не ошибаюсь то дозапись производится примерно следующим образом

Код:
assign(e,имя_файла);
reset(e);
SeekEof(e);
writeln('все что здесь будет записано добавиться в конец');
closefile(e);
Могу лишь пнуть в нужном направлении (ну или как получится)
Swarog вне форума Ответить с цитированием
Старый 17.05.2011, 09:57   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
если не ошибаюсь то дозапись производится примерно следующим образом
Append(f, text) же.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.05.2011, 10:30   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Swarog,
э нет. Так нельзя!

потому как SeekEof - это функция, которая "Returns the end-of-file status of a file.
" возвращает TRUE - если указатель файла находится в конце.
Да и применима она только к тестовым файлам...

DarkDeidara, ткните пальцем, где Вы хотите дописывать данные.
а вообще.
если файл, куда надо дописать данные - текстовый - тогда открывайте его через Append(f) и пишите.

если же файл, куда надо дописать данные - типизированный, тогда смотрите Ваш же код - как Вы дописываете рабочих в таблицу (процедура add_sprav)!
примерно так это делается:
Код:
   reset(e);
   seek(e, filesize(e));

   заполнение записи st ....

   // дозапись данных
   write(e, st);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.05.2011, 13:27   #5
DarkDeidara
Пользователь
 
Аватар для DarkDeidara
 
Регистрация: 30.11.2010
Сообщений: 18
По умолчанию

итак тыкаю пальцем))
"7.Рассчитанные суммы заработной платы по наряду поместить в записи по работникам - членам бригады - с кодом вида оплат: 1-сдельная оплата."
Нужно вот сюда

Вставить вот эти рассчёты

Чтобы врезультате получилось вот так


Эта таблица выдаётся в вспомогательной программе, а дозаписывать в неё вычисления нужно в основной.
И сделать это для каждого члена по которому проводились расчёты(в данном случае для 2 и 4).

Последний раз редактировалось DarkDeidara; 17.05.2011 в 13:33. Причина: дополнение
DarkDeidara вне форума Ответить с цитированием
Старый 18.05.2011, 06:35   #6
DarkDeidara
Пользователь
 
Аватар для DarkDeidara
 
Регистрация: 30.11.2010
Сообщений: 18
По умолчанию

и дозапись нужна не в конец файла, а в нужную запись.
DarkDeidara вне форума Ответить с цитированием
Старый 18.05.2011, 10:23   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

простите, Ваших данных у меня нет, куда и что дописывать - я не понял...

Цитата:
и дозапись нужна не в конец файла, а в нужную запись.
так:
Код:
  reset(e); {открыли файл на чтение/запись}

  seek(e, НомерНужнойЗаписи); {стали на нужную запись в файле}
  Read(e, st); { прочитали в тип то, что есть в записи сейчас }

  { изменили данные в записи (в памяти) }
  st.Поле1 := 100;
  st.поле2 := 3000;

  seek(e, НомерНужнойЗаписи); {стали на нужную запись в файле}
  write(e, st);  { сохранили их в файл }
примерно так...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дозапись информации в файл. ROMA2PVT Помощь студентам 11 22.03.2010 12:29
Запись данных в файл Pti44ka Помощь студентам 5 10.12.2009 20:09
Дозапись в WORD yurganov Общие вопросы Delphi 1 10.07.2009 10:41
Дописывание данных в файл SoMaL Общие вопросы по Java, Java SE, Kotlin 1 14.02.2009 22:28
дозапись в файл Djaconda Общие вопросы C/C++ 1 04.06.2008 23:52