type LibBook = record Book:string[50]; Author:string[50]; Publisher:string[30]; PubYear:integer; City:string[30]; Deleted:boolean end; var gf:file of LibBook;
function Create(pName:string):file of LibBook; // Создает или обнуляет существующий файл библиотеки // с полным именем pName (в имени можно указать и путь) begin var f:file of LibBook; Rewrite(f,pName); Result:=f; f.Close end;
procedure Insert(pLib:LibBook); // Добавляет книгу в базу begin var n:=FileSize(gf); Seek(gf,n); Write(gf,pLib); end;
procedure BookWrite(pn:integer;pLib:LibBook); // вывод книги номер pn begin Writeln('*** Книга №',pn,' ***'); if pLib.Deleted=False then begin Writeln('Название: ',pLib.Book); Writeln('Автор: ',pLib.Author); Writeln('Издатель: ',pLib.Publisher); Writeln('Год выпуска: ',pLib.PubYear); Writeln('Город: ',pLib.City); end else Writeln('=== У Д А Л Е Н А ==='); Writeln end;
procedure View(pKol:integer:=0); // Отображает содержимое библиотеки. // Можно вывести не все, а только pKol первых записей begin var nB:=FileSize(gf); if nb=0 then Writeln('Библиотека пустая') else begin Seek(gf,0); Writeln('Книг в библиотеке: ',nB,NewLine); if pKol<>0 then nB:=min(pKol,nb); var Lib:LibBook; for var i:=1 to nB do begin Read(gf,Lib); BookWrite(i,Lib) end end end;
function Delete(pNom:integer):boolean; // Удаляет книгу с номером pNom и возвращает true. // Возвращает false, если такой книги нет begin var nB:=FileSize(gf); var Lib:LibBook; if pNom-1>nB then begin Writeln('Книга №',pNom,' не найдена'); Result:=False end else begin Seek(gf,pNom-1); Read(gf,Lib); Lib.Deleted:=True; Seek(gf,pNom-1); Write(gf,Lib); Writeln('Книга №',pNom,' удалена'); Result:=True end; end;
procedure Find(ps:string); // поиск книги по параметрам, заданным строкой // Формат <код> пробел <значение> begin var n:=Ord(ps[1])-Ord('0'); Delete(ps,1,2); var par:=ps; var Lib:LibBook; case n of 0:begin // по номеру книги var nb:=FileSize(gf); var fn:=par.ToInteger; if fn-1>nb then Writeln('Книги с таким номером нет') else begin Seek(gf,fn-1); Read(gf,Lib); BookWrite(fn,Lib) end end; 1:begin // по названию книги var nl:=par.Length; // для контекстного поиска Seek(gf,0); var i:=1; while not Eof(gf) do begin Read(gf,Lib); if Copy(Lib.Book,1,nl)=par then begin BookWrite(i,Lib); Exit end else Inc(i) end; Writeln('Поиск по названию книги ',par,' неуспешен') end; 2:begin // по автору книги var nl:=par.Length; // для контекстного поиска Seek(gf,0); var i:=1; while not Eof(gf) do begin Read(gf,Lib); if Copy(Lib.Author,1,nl)=par then begin BookWrite(i,Lib); Exit end else Inc(i) end; Writeln('Поиск по автору книги ',par,' неуспешен') end; 3:begin // по издательству var nl:=par.Length; // для контекстного поиска Seek(gf,0); var i:=1; while not Eof(gf) do begin Read(gf,Lib); if Copy(Lib.Publisher,1,nl)=par then begin BookWrite(i,Lib); Exit end else Inc(i) end; Writeln('Поиск по издательству книги ',par,' неуспешен') end; 4:begin // по году выпуска Seek(gf,0); var i:=1; var ipar:=par.ToInteger; while not Eof(gf) do begin Read(gf,Lib); if Lib.PubYear=ipar then begin BookWrite(i,Lib); Exit end else Inc(i) end; Writeln('Поиск по году издания ',par,' неуспешен') end; 5:begin // по городу var nl:=par.Length; // для контекстного поиска Seek(gf,0); var i:=1; while not Eof(gf) do begin Read(gf,Lib); if Copy(Lib.City,1,nl)=par then begin BookWrite(i,Lib); Exit end else Inc(i) end; Writeln('Поиск по городу ',par,' неуспешен') end; else Writeln('Неверная строка поиска') end end;
const LibName='MyLib.lib'; begin var MyBook:LibBook; gf:=Create(LibName); Reset(gf,LibName); With MyBook do begin Book:='Первый учебник'; Author:='Первый автор'; Publisher:='Издательство 1'; PubYear:=2010;; City:='Город 1' end; Insert(MyBook); With MyBook do begin Book:='Второй учебник'; Author:='Второй автор'; Publisher:='Издательство 2'; PubYear:=2012;; City:='Город 2' end; Insert(MyBook); With MyBook do begin Book:='Третий учебник'; Author:='Третий автор'; Publisher:='Издательство 3'; PubYear:=2006;; City:='Город 3' end; Insert(MyBook); View; Delete(2); View; Find('0 3'); Find('1 Перв'); Find('2 Тре'); Find('3 Издательство 2'); Find('4 2006'); gf.Close end.
В 1623 году Вильгельм Шиккард придумал «Считающие часы» — первый арифмометр, умевший выполнять четыре арифметических действия. Считающими часами устройство было названо потому, что, как и в настоящих часах, работа механизма была основана на использовании звёздочек и шестерёнок. Это изобретение нашло практическое использование в руках друга Шиккарда, философа и астронома Иоганна Кеплера.
За этим последовали машины Блеза Паскаля («Паскалина», 1642 г.) и Готфрида Вильгельма Лейбница — арифмометр Лейбница.
Лейбниц также описал двоичную систему счисления — один из ключевых принципов построения всех современных компьютеров. Однако, вплоть до 1940-х многие последующие разработки (включая машины Чарльза Бэббиджа и даже ЭНИАК 1945 года) были основаны на более сложной в реализации десятичной системе.
В 1820 году Шарль Ксавье Тома де Кольмар создал первое серийно выпускавшееся механическое счётное устройство — арифмометр Томаса, который мог складывать, вычитать, умножать и делить. В основном, он был основан на работе Лейбница.
В 1845 году Израиль Штаффель представил счётную машину, которая кроме четырёх арифметических действий могла извлекать квадратные корни. Арифмометры, считающие десятичные числа, использовались до 1970-х.
type
LibBook = record
Book:string[50];
Author:string[50];
Publisher:string[30];
PubYear:integer;
City:string[30];
Deleted:boolean
end;
var
gf:file of LibBook;
function Create(pName:string):file of LibBook;
// Создает или обнуляет существующий файл библиотеки
// с полным именем pName (в имени можно указать и путь)
begin
var f:file of LibBook;
Rewrite(f,pName);
Result:=f;
f.Close
end;
procedure Insert(pLib:LibBook);
// Добавляет книгу в базу
begin
var n:=FileSize(gf);
Seek(gf,n);
Write(gf,pLib);
end;
procedure BookWrite(pn:integer;pLib:LibBook);
// вывод книги номер pn
begin
Writeln('*** Книга №',pn,' ***');
if pLib.Deleted=False then begin
Writeln('Название: ',pLib.Book);
Writeln('Автор: ',pLib.Author);
Writeln('Издатель: ',pLib.Publisher);
Writeln('Год выпуска: ',pLib.PubYear);
Writeln('Город: ',pLib.City);
end
else Writeln('=== У Д А Л Е Н А ===');
Writeln
end;
procedure View(pKol:integer:=0);
// Отображает содержимое библиотеки.
// Можно вывести не все, а только pKol первых записей
begin
var nB:=FileSize(gf);
if nb=0 then Writeln('Библиотека пустая')
else begin
Seek(gf,0);
Writeln('Книг в библиотеке: ',nB,NewLine);
if pKol<>0 then nB:=min(pKol,nb);
var Lib:LibBook;
for var i:=1 to nB do begin
Read(gf,Lib);
BookWrite(i,Lib)
end
end
end;
function Delete(pNom:integer):boolean;
// Удаляет книгу с номером pNom и возвращает true.
// Возвращает false, если такой книги нет
begin
var nB:=FileSize(gf);
var Lib:LibBook;
if pNom-1>nB then begin
Writeln('Книга №',pNom,' не найдена');
Result:=False
end
else begin
Seek(gf,pNom-1);
Read(gf,Lib);
Lib.Deleted:=True;
Seek(gf,pNom-1);
Write(gf,Lib);
Writeln('Книга №',pNom,' удалена');
Result:=True
end;
end;
procedure Find(ps:string);
// поиск книги по параметрам, заданным строкой
// Формат <код> пробел <значение>
begin
var n:=Ord(ps[1])-Ord('0');
Delete(ps,1,2);
var par:=ps;
var Lib:LibBook;
case n of
0:begin // по номеру книги
var nb:=FileSize(gf);
var fn:=par.ToInteger;
if fn-1>nb then Writeln('Книги с таким номером нет')
else begin
Seek(gf,fn-1);
Read(gf,Lib);
BookWrite(fn,Lib)
end
end;
1:begin // по названию книги
var nl:=par.Length; // для контекстного поиска
Seek(gf,0);
var i:=1;
while not Eof(gf) do begin
Read(gf,Lib);
if Copy(Lib.Book,1,nl)=par then begin
BookWrite(i,Lib); Exit
end
else Inc(i)
end;
Writeln('Поиск по названию книги ',par,' неуспешен')
end;
2:begin // по автору книги
var nl:=par.Length; // для контекстного поиска
Seek(gf,0);
var i:=1;
while not Eof(gf) do begin
Read(gf,Lib);
if Copy(Lib.Author,1,nl)=par then begin
BookWrite(i,Lib); Exit
end
else Inc(i)
end;
Writeln('Поиск по автору книги ',par,' неуспешен')
end;
3:begin // по издательству
var nl:=par.Length; // для контекстного поиска
Seek(gf,0);
var i:=1;
while not Eof(gf) do begin
Read(gf,Lib);
if Copy(Lib.Publisher,1,nl)=par then begin
BookWrite(i,Lib); Exit
end
else Inc(i)
end;
Writeln('Поиск по издательству книги ',par,' неуспешен')
end;
4:begin // по году выпуска
Seek(gf,0);
var i:=1;
var ipar:=par.ToInteger;
while not Eof(gf) do begin
Read(gf,Lib);
if Lib.PubYear=ipar then begin
BookWrite(i,Lib); Exit
end
else Inc(i)
end;
Writeln('Поиск по году издания ',par,' неуспешен')
end;
5:begin // по городу
var nl:=par.Length; // для контекстного поиска
Seek(gf,0);
var i:=1;
while not Eof(gf) do begin
Read(gf,Lib);
if Copy(Lib.City,1,nl)=par then begin
BookWrite(i,Lib); Exit
end
else Inc(i)
end;
Writeln('Поиск по городу ',par,' неуспешен')
end;
else Writeln('Неверная строка поиска')
end
end;
const LibName='MyLib.lib';
begin
var MyBook:LibBook;
gf:=Create(LibName);
Reset(gf,LibName);
With MyBook do begin
Book:='Первый учебник';
Author:='Первый автор';
Publisher:='Издательство 1';
PubYear:=2010;;
City:='Город 1'
end;
Insert(MyBook);
With MyBook do begin
Book:='Второй учебник';
Author:='Второй автор';
Publisher:='Издательство 2';
PubYear:=2012;;
City:='Город 2'
end;
Insert(MyBook);
With MyBook do begin
Book:='Третий учебник';
Author:='Третий автор';
Publisher:='Издательство 3';
PubYear:=2006;;
City:='Город 3'
end;
Insert(MyBook);
View;
Delete(2);
View;
Find('0 3');
Find('1 Перв');
Find('2 Тре');
Find('3 Издательство 2');
Find('4 2006');
gf.Close
end.
В 1623 году Вильгельм Шиккард придумал «Считающие часы» — первый арифмометр, умевший выполнять четыре арифметических действия. Считающими часами устройство было названо потому, что, как и в настоящих часах, работа механизма была основана на использовании звёздочек и шестерёнок. Это изобретение нашло практическое использование в руках друга Шиккарда, философа и астронома Иоганна Кеплера.
За этим последовали машины Блеза Паскаля («Паскалина», 1642 г.) и Готфрида Вильгельма Лейбница — арифмометр Лейбница.
Лейбниц также описал двоичную систему счисления — один из ключевых принципов построения всех современных компьютеров. Однако, вплоть до 1940-х многие последующие разработки (включая машины Чарльза Бэббиджа и даже ЭНИАК 1945 года) были основаны на более сложной в реализации десятичной системе.
В 1820 году Шарль Ксавье Тома де Кольмар создал первое серийно выпускавшееся механическое счётное устройство — арифмометр Томаса, который мог складывать, вычитать, умножать и делить. В основном, он был основан на работе Лейбница.
В 1845 году Израиль Штаффель представил счётную машину, которая кроме четырёх арифметических действий могла извлекать квадратные корни. Арифмометры, считающие десятичные числа, использовались до 1970-х.
Объяснение: