Turbo Pascal

Пух

كنت بلهاء
Модератор
Ответ: Turbo Pascal

есть типизированый файл, есть записи(фамилия ученика и его оценки по 7-ми предметам). Как редактировать оценки ученика? как удалить запись?(скопировать все в другой файл, кроме заданой записи?).
ссылки на инет не пугают...
 
A

AkeL.php

Guest
Ответ: Turbo Pascal

Пример. Написать программу, которая по запросу для работника цеха с указанной фамилией позволяет изменять зарплату. (Используем ранее созданный файл ‘work.dan’):
Код:
Program 
F1;

Uses
wincrt;
Type
    Work=record
  ceh:byte;
name:string[20];
  pol:char;
  zar:real;
  vik:byte
  end;
Var      
z,p:Work;
  f:file of
Work;
  k,c:byte;

fam:string[20];
{Процедура вывода базы}
procedure
vivod;
begin
  reset(f);        
{открываем файл для чтения}
writeln(‘             
Список работающих’);
  while not (eof(f))
do           {вывод на
экран содержимого файла} 
begin                                     
read(f,z);            
write(z.ceh); gotoxy(10,wherey);             
write(z.name); 
gotoxy(30,wherey);           
write(z.vik); 
gotoxy(35,wherey);
write(z.zar:3:2);
gotoxy(45,wherey);             
write(z.pol);
writeln;
  end;
  end;

 

Begin
  assign(f,’work.dan’);
vivod; {вывод на экран базы} 
Writeln(‘     
КОРРЕКТИРОВКА’);
  reset(f);
  writeln(‘Введите номер цеха’);
  readln(c);
  writeln(‘Введите фамилию’);
  readln(fam);
k:=0;  
{признак равен 0, если запись не найдена,
1 –
запись найдена}
  while 
not(eof(f)) do
begin
              read(f,p);
              if (fam=p.name)and(c=p.ceh)
then {если номер цеха в записи и фамилия совпадают со значением запроса,
проводим корректировку}             
begin
                          writeln(p.name, ‘   ‘,p.zar:4:2);

k:=1;                         
writeln(‘введите новую зарплату’);                         
readln(p.zar);                        
seek(f,filepos(f)-1); {перемещаем указатель файла на 1 вверх}                         
write(f,p); {записываем новую запись в файл}              
end;
 end;
  if
k=0 then
  writeln(‘запись не найдена’)
else
  writeln(‘корректировка
проведена’);
vivod; {вывод на экран базы}

  close(f);

End.
Добавление информации в файл

Пусть необходимо к уже существующему файлу добавить ряд элементов. Для этого надо выполнить следующие действия:

1. связать файловую переменную с файлом;
2. открыть файл для чтения и записи (Reset(<ф.п.>));
3. установить указатель файла за последним его компонентом процедурой Seek следующим образом:
Seek(<ф.п.>, FileSize(<ф.п.>));
4. записать дополнительные данные
Write(<ф.п.>,<буф.>);
5. закрыть файл (Close(<ф.п.>)).

Пример. Написать программу, которая позволяет добавлять информацию в файл. (Используем ранее созданный файл ‘work.dan’):

Код:
Program 
F2;
Uses
crt;
Type
    Work=record
  ceh:byte;
name:string[20];
pol:char;
  zar:real;
  vik:byte
  end;
Var      
p:Work;
  f:file of
Work;
  k:byte; 
fam:string[20];
Begin
Writeln(‘     
Добавление данных в файл’);
assign(f,’work.dan’);
  reset(f);
  seek(f,filesize(f));
  repeat
              write(‘Введите цех’);
              readln(p.ceh);
              write(‘Введите Ф.И.О.’);
              readln(p.name);
              write(‘Введите пол’);
              readln(p.pol);
              write(‘Введите зарплату’);
readln(p.zar);
              write(‘Введите
возраст’);
readln(p.vik);
              write(f,p);
  until
keypressed;
  close(f);
End.
Удаление записи из файла

Пример. Написать программу, которая позволяет удалять запись из файла для работника цеха с указанной фамилией. (Используем ранее созданный файл ‘work.dan’).

Код:
Program 
F1;
Uses
wincrt;
Type
    Work=record
  ceh:byte;
name:string[20];
  pol:char;
  zar:real;
  vik:byte
  end;

Var      
z,p:Work;
  f:file of
Work;
  k,c:byte;
fam:string[20];
nom:integer;
s:char;
{Процедура вывода базы}
procedure
vivod;
begin
  reset(f);        
{открываем файл для чтения}
writeln(‘             
Список работающих’);
  while not (eof(f))
do           {вывод на
экран содержимого файла}
begin                                     
read(f,z);            
write(z.ceh); gotoxy(10,wherey);            
write(z.name); 
gotoxy(30,wherey);            
write(z.vik); 
gotoxy(35,wherey);
write(z.zar:3:2);
gotoxy(45,wherey);
write(z.pol);
writeln;
  end;
  end;
Begin
  assign(f,’work.dan’);
vivod; {вывод на экран базы} 
  reset(f); 
Writeln(‘     
Удаление записи’);
  writeln(‘Введите номер цеха’);
  readln(c);
  writeln(‘Введите фамилию’);
  readln(fam);
k:=0;
{признак: найдена ли запись}  
while 
not(eof(f)) do
  begin
             read(f,p);
              if (fam=p.name)and(c=p.ceh)
then {если номер цеха в записи и фамилия совпадают со значением запроса,
проводим удаление}            
begin
                          writeln(p.ceh,‘ ‘,p.name,‘   ‘, 

p.zar:4:2); {выводим поля записи} 
k:=1; {запись с заданными параметрами найдена}                        
writeln(‘удалять ? (д/н)’);                      
readln(s);
                          if s=’д’
then
                          nom:=filepos(f)-1;
{запоминаем 
номер записи, которую надо удалить}                        
seek(f,filesize(f)-1); {устанавливаем
 указатель файла на последнюю запись}                        
read(f,p); {считываем последнюю
 запись}                          
seek(f,nom); {устанавливаем

 указатель файла на удаляемую запись}                        
write(f,p); {записываем вместо 
удаляемой записи последнюю}                          
seek(f,filesize(f)-1); {устанавливаем
 указатель файла на последнюю запись}
              truncate(f);
{усекаем размер файла до 
текущей позиции. Все элементы,
 расположенные после текущей позиции 
в файле, удаляются, и текущая позиция в
файле становится его концом} 

              end;
end;
  if
k=0 then
  writeln(‘запись
не найдена’) 
else
writeln(‘запись
удалена ’);
vivod; {вывод на экран базы}
  close(f);
End.
Пожалуйста. Дальше уже сам... :)
 

Пух

كنت بلهاء
Модератор
Ответ: Turbo Pascal

AkeL.php спасибо, дальше нацарапаю :)
 

Пух

كنت بلهاء
Модератор
Ответ: Turbo Pascal

написал удаление записи, редактирования, но сдесь в примере изменяеться только 1 переменная (зарплата), а если у меня их 7 ? Как сделать, чтобы можно было выбирать какую переменную редактировать? Скорей всего case of, только как точно не могу сообразить О_О
з.ы. спать пора :)
 
A

AkeL.php

Guest
Ответ: Turbo Pascal

Код:
readln(p.zar);              
readln(p.vik);
readln(p.ceh);
{и т.д.}

              write(f,p);{запись новой инфы}
 

Illusion

New Member
Нужна помощь

Люди,помогите написать программы.Пожалуйста,очень надо!Кто сможет напишите в приват.Я 29 ВАРИАНТ!
Ссылка на задания
 
Останнє редагування:
A

AkeL.php

Guest
Ответ: Turbo Pascal

А, ну делай кейсами, в чем проблема ?
 

Cris

Member
Ответ: Turbo Pascal

ЛЮДИ как можно передать данный из сайта ексешнику(в моем случие написаном на паскале)?? чтоб прога могла обрабатывать данные которые идут с сайта
 
A

AkeL.php

Guest
Ответ: Turbo Pascal

Никогда такими извращениями не занимался, но все же рекомендую почитать , может пойдет.
 
Зверху