Считая,что на каждой странице записной книжки указаны фамилии, начинающиеся с одной и той же буквы — индекса этой страницы, написать программу,с логической функцией number(z,f,n),определяющую, есть ли в записной книжке z сведения о знакомом с фамилией f, и , если есть, присваивающую параметру n номер его телефона — Pascal(Паскаль)

uses crt;
type
slovo=packed array[1..9]of char;
telefon=1000000..9999999;
person=record
       family:slovo;
       number:telefon;
       end;
page=array[1..20]of person;
bloknot=array['A'..'Z']of page;
 
function Number(z:bloknot;f:slovo;var n:telefon;k:byte):boolean;
{Функция описана в задании немного неточно. 
На странице не обязательно ровно 20 записей, может быть меньше и даже 0, при тестировании я ноль и вводил на большинстве страниц, иначе очеень долго вводить данные.
Ввел параметр k-количество записей на странице
var i:char;
    j:byte;
begin
Number:=false;{считаем что фамилии нет}
for i:='A' to 'Z' do{идем по страницам блокнота}
for j:=1 to k do{идем по нужной странице до количества записей на ней}
if z[i][j].family=f then{если нашли нужную фамилию}
 begin
  Number:=true;{меняем флаг логической функции}
  n:=z[i][j].number;{запоминаем номер телефона}
  break;{дальше не ищем}
 end;
end;
var zap:bloknot;{сам блокнот}
    fm:slovo;{искомая фамилия}
    b:boolean;{переменная логического типа}
    i,c:char;{счетчики циклов по символам}
    j,k:integer;{счетчики циклов по номерам}
    a:array['A'..'Z'] of byte;{массив количеств записей на каждой странице}
begin
clrscr;
writeln('Vvedite dannye:');
for i:='A' to 'Z' do{перебираем все страницы}
 begin
  writeln('Zapishite familii na bukvu ',i);{на каждой странице фамилии на одну букву}
  write('Kolichestvo familij=');
  readln(a[i]);{запоминаем сколько фамилий на каждой странице}
  writeln('CVvedite dannye, okonchanie Esc:');
  for j:=1 to a[i] do
   begin
     writeln(' Telefon ',j);
     repeat
     write('  Family: ');
     k:=1;
     while k<9 do{фамилия из 9 букв}
      begin
       read(fm[k]);
       k:=k+1;
      end;
     readln;
     until fm[1]=i;{если первая буква неверно, повторять}
     zap[i][a[i]].family:=fm;{запоминаем фамилию}
     write('  Nomer telefona: ');
     repeat
     readln(zap[i][a[i]].number);{запоминаем номер телефона}
     until (zap[i][a[i]].number>99999)and(zap[i][a[i]].number<10000000);
   end;
 end;
clrscr;{очищаем экран от ввода}
writeln('Vvedite familiyu dlya poiska:');
for j:=1 to 9 do
read(fm[j]);{вводим фамилию для поска}
readln;
for j:=1 to a[fm[1]] do{смотрим страницу с первой буквой фамилии}
Number(zap,fm,k,b);
if not b then{если не false}
write('Nomer telefona ',zap[fm[1]][j].number){выводим телефон}
else write('Takoj familii net!');{иначе нет такого}
readln
end.

Leave a Comment

− 1 = 2