Romich: другие произведения.

Battle-Tracks

Music.lib.ru: [Регистрация] [Найти] [Рейтинги] [Обсуждения] [Новинки] [Помощь]
  • Комментарии: 1, последний от 23/03/2009.
  • © Copyright Romich (...)
  • Обновлено: 03/02/2007. 0k. Статистика.
  • Хип-хоп
  • Автор музыки: Romich
  • Автор текста: Romich
  • Исполняет: Romich

  • 	  
             

    * * *

    a_kak_eto_ne_lubit

     
    Ваша оценка:
  • Прослушать:[mp3,2064k]
  • Жанр: Хип-хоп
  • Пароход отчалил от пристани печале,
    как жаль и щемило что-то внутри души,
    силуэт, перешагивал через песчаные замки,
    и уселся в дали от суеты на камне,
    
    глаза прищуривались, ветер дул с океана,
    Меланхолия, и как её звали? мария?
    Ладонь поддерживила голову, ладонь локоть,
    А как это не любить? ведь сердцу плохо,
    
    Пустота гложит, душевная боль,
    "Да ты о чём сейчас ведь это полная свобода!"
    А ты кто такой?! Я твой внутренний голос,
    люби себя плюс ко всему, родителей, семья,
    
    Она ждала принца на коне, а он принцессу,
    Она желала серенад, а он хотел лишь секса,
    И в следствие чего лопаты копали землю,
    Покойся с миром любовь, и на могилу цветов,
    
    Глаза открылись, образы расплылись в миг,
    лишь солнце по волнам пускало игривый блик,
    снова расстройства, доза анти-депрессантов,
    снова вопросы в голову - где она та самая?
    
    А помнишь конец второй недели февраля,
    Валентинки, цветы, сердечки, признания,
    
    

    * * *

    hhnet1_round1_romich

     
    Ваша оценка:
  • Прослушать:[mp3,1762k]
  • Жанр: Хип-хоп
  • Хип-хоп есть на хип-хопа точка нэт,
    Я убедился в этом отправляя, баттл-трэк,
    Хип-хоп есть на хип-хопа точка нэт,
    А кто не верит заходи на сайт, в интернет,
    
    Хип-хоп есть на хип-хопа точка нэт,
    Я убедился в этом, отправляя баттл-трэк,
    Хип-хоп есть на хип-хопа точка нэт,
    А кто не верит хавай на обед горелый амлет.
    
    
    Я оторву язык тому кто ляпнет что хип-хопа нет
    Это святое для меня, ну а Тупак икона,
    Испокон веков биты вбивали в головы подростков,
    Тех кто ценит искусство в двора отголосках,
    
    Мой голос вам несет эмоции записаны по средству
    микрофона содрогался в ужаса конвульсиях,
    покуда бьётся пульс и лик моего культа баунса заколотого
    копьями на льду как Куликова битва, 
    
    Хип-хоп живёт лишь в андеграунде, где-то под грунтом,
    остальное лишь попса, про клубы писанина,
    как кулаками биты, те кто из завода ваты,
    покайтесь перед батькой ваши строки станут складны, 
    
    Ну ладно добры молодцы, вот мне пора заканчивать,
    В куплетик вложил образы и в читку тонну кача,
    Покачивая головами парами во втором раунде 
    ждите меня ведь я иду по тропам правильным...
    
    
    
     

    * * *

    moi_drug_moi_vrag

     
    Ваша оценка:
  • Прослушать:[mp3,942k]
  • Жанр: Хип-хоп
  •   Массивы
      Массивы - это совокупности однотипных элементов. Характеризуются они следующим:
      
      каждый компонент массива может быть явно обозначен и к нему имеется прямой доступ;
      число компонент массива определяется при его описании и в дальнейшем не меняется.
      Для обозначения компонент массива используется имя переменной-массива и так называемые индексы, которые обычно указывают желаемый элемент. Тип индекса может быть только порядковым (кроме longint). Чаще всего используется интервальный тип (диапазон).
      
      Описание типа массива задается следующим образом:
      
      type
       имя типа = array[ список индексов ] of тип
      
      Здесь имя типа - правильный идентификатор; список индексов - список одного или нескольких индексных типов, разделенных запятыми; тип - любой тип данных.
      
      Вводить и выводить массивы можно только поэлементно.
      
      Пример 1. Ввод и вывод одномерного массива.
      
      const
       n = 5;
      type
       mas = array[1..n] of integer;
      var
       a: mas;
       i: byte;
      begin
       writeln('введите элементы массива');
       for i:=1 to n do readln(a[i]);
       writeln('вывод элементов массива:');
       for i:=1 to n do write(a[i]:5);
      end.
      
      Определить переменную как массив можно и непосредственно при ее описании, без предварительного описания типа массива, например:
      
      var a,b,c: array[1..10] of integer;
      Если массивы a и b описаны как:
      
      var
       a = array[1..5] of integer;
       b = array[1..5] of integer;
      
      то переменные a и b считаются разных типов. Для обеспечения совместимости применяйте описание переменных через предварительное описание типа.
      
      Если типы массивов идентичны, то в программе один массив может быть присвоен другому. В этом случае значения всех переменных одного массива будет присвоены соответствующим элементам второго массива.
      
      Вместе с тем, над массивами не определены операции отношения. Сравнивать два массива можно только поэлементно.
      
      Так как тип, идущий за ключевым словом of в описании массива, - любой тип Турбо Паскаль, то он может быть и другим массивом. Например:
      
      type
       mas = array[1..5] of array[1..10] of integer;
      
      Такую запись можно заменить более компактной:
      
      type
       mas = array[1..5, 1..10] of integer;
      
      Таким образом возникает понятие многомерного массива. Глубина вложенности массивов произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничена, однако не может быть более 65520 байт.
      
      Работа с многомерными массивами почти всегда связана с организацией вложенных циклов. Так, чтобы заполнить двумерный массив (матрицу) случайными числами, используют конструкцию вида:
      
      for i:=1 to m do
      for j:=1 to n do a[i,j]:=random(10);
      
      Для "красивого" вывода матрицы на экран используйте такой цикл:
      
      for i:=1 to m do begin
       for j:=1 to n do write(a[i,j]:5);
       writeln;
      end;
      

    * * *

    r2_romich

     
    Ваша оценка:
  • Прослушать:[mp3,2882k]
  • Жанр: Хип-хоп
  • Феномен, в клинике, расстройство психики,
    Убеждает доктора в том что он сам не свой,
    Воет ночью на луну, а по утрам в лужах
    видит отражение знакомой мимики,
    Его эго подобно двум полосам жизни,
    Противоположности двух цветовых палитр,
    То есть может безсознательно царапать грудь,
    По утрам удивлено дивиться ранам,
    Расщипление личности подобно досок в щепки,
    Я не испытывал этого чтобы знать симптомы,
    Думал дважды вдавливая карандаш в тетрадь,
    Вернёмся к образу который я пытался создать,
    Его имя не важно для общей картины,
    Одно известно точно, дата его именины,
    Тринадцатый до счёту день, где-то в начале марта,
    Отсюда начался отсчёт двоенья личности парня,
    Он во весь голос кричал: украдена копилка,
    а выяснилось сам украл то весь год копил,
    Шизофрения на лицо, на мира восприятье,
    в комнатах дурки парень ощущал себя приятней,
    Причина амнезии - страх и тревоги детства,
    Вполне возможно всё это досталось по наследству,
    Клинический гипноз, сеансы психотерапии,
    Помогут в облегчении симптомов, но не более
    
    
    

    * * *

    r3_romich

     
    Ваша оценка:
  • Прослушать:[mp3,2018k]
  • Жанр: Хип-хоп
  •   Тип раунда (стиль трека) - Look around (Посмотри вокруг). Необходимо раскрыть тему раунда используя окружающую Вас действительность.
      
      
      Третий глаз, у тебя во лбу,
      Дверь в твоё сознание,
      Как у индусов, чакра,
      Это называют 2 РАЗА
      
      Третий глаз, у тебя во лбу,
      Дверь в твоё сознание,
      Как у индусов, чакра,
      Это называет- ся...
      
      ...глаз, у тебя во лбу,
      Дверь в твоё сознание,
      Как у индусов, но безумный
      представит анус...
      
       Кто же без ума? скажите: Дай Ответ!
      Тот опонент которого я бы порвал в паре,
      Стану биться до конца через сотню эмси,
      Знакомым жал руку, остальным плохие вести!
      У меня два глаза, оказалось есть третий,
      И я чувствую что первое место сссветит,
      Мне и пацанам из сетевого андеграунда,
      Четыре раунда читаем без привелегий,
      Кто ценит баунс, посылаю в анус,
      и мой тонус танцы на могиле санта-клауса,
      чёто загнул я... лазию по форуму КЗМЗ,
      запрет на маты в трэках, на диссы к опонентам,
      завет цензуры прям как на балу Людовика третьего,
      и вам даю сха-вать, рэпрезент, да-вай, опонент,
      вста-вай, в очередь спра-во, за продажной славой
      
      
      
       а я клацаю по клаве, а на улице плавятся люди столица
      дымится, жара как на ибица, лыбятся затем влюбятся напьются
      скурятся курицей закусят на крыльце подъезда и смеются...
      
      сеанс гипноза
      
      
       как у индусов, на лбу точка

    * * *

    rapbattle_round1_romich

     
    Ваша оценка:
  • Автор текста: Romich
  • Автор музыки: Romich
  • Исполняет: Romich
  • Прослушать:[mp3,956k]
  • Жанр: Хип-хоп
  •   Процедуры и функции
      
      В языке Паскаль, как и в большинстве языков программирования, предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму. Это бывает необходимо тогда, когда какой-либо подалгоритм неоднократно повторяется в программе или имеется возможность использовать некоторые фрагменты уже разработанных ранее алгоритмов. Кроме того, подпрограммы применяются для разбиения крупных программ на отдельные смысловые части в соответствии с модульным принципом в программировании.
      
      Для использования подалгоритма в качестве подпрограммы ему необходимо присвоить имя и описать алгоритм по правилам языка Паскаль. В дальнейшем, при необходимости вызвать его в программе, делают вызов подпрограммы упоминанием в нужном месте имени соответствующего подалгоритма со списком входных и выходных данных. Такое упоминание приводит к выполнению входящих в подпрограмму операторов, работающих с указанными данными. После выполнения подпрограммы работа продолжается с той команды, которая непосредственно следует за вызовом подпрограммы.
      
      В языке Паскаль имеется два вида подпрограмм - процедуры и функции.
      
      Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подрограммы в вызывающий блок (результаты работы подпрограммы).
      
      Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.
      
      
      
      Описание и вызов процедур и функций
      Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, перменных. Исполняемая часть содержит собственно операторы процедур.
      
      Формат описания процедуры имеет вид:
      
      procedure имя процедуры (формальные параметры);
       раздел описаний процедуры
      begin
      
       исполняемая часть процедуры
      
      end;
      
      Формат описания функции:
      
      function имя функции (формальные параметры):тип результата;
       раздел описаний функции
      begin
      
       исполняемая часть функции
      
      end;
      
      Формальные параметры в заголовке процедур и функций записываются в виде:
      
      var имя праметра: имя типа
      и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.
      
      Вызов процедуры производится оператором, имеющим следующий формат:
      
      имя процедуры(список фактических параметров);
      Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
      
      Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.
      
      Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду:
      
      имя функции := результат;
      При вызове процедур и функций необходимо соблюдать следущие правила:
      
      количество фактических параметров должно совпадать с количеством формальных;
      соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
      Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.
      
      Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.
      
      var x,y,m,n: integer;
      
      procedure MaxNumber(a,b: integer; var max: integer);
      begin
       if a>b then max:=a else max:=b;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       MaxNumber(x,y,m);
       MaxNumber(2,x+y,n);
       writeln('m=',m,'n=',n);
      end.
      
      Аналогичную задачу, но уже с использованием функций, можно решить так:
      
      var x,y,m,n: integer;
      
      function MaxNumber(a,b: integer): integer;
       var max: integer;
      begin
       if a>b then max:=a else max:=b;
       MaxNumber := max;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       m := MaxNumber(x,y);
       n := MaxNumber(2,x+y);
       writeln('m=',m,'n=',n);
      end.
      
      
      Передача параметров
      
      
      В стандарте языка Паскаль передача параметров может производиться двумя способами - по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке - параметрами-переменными. Последние отличаются тем, что в заголовке процедуры (функции) перед ними ставится служебное слово var.
      
      При первом способе (передача по значению) значения фактических параметров копируются в соответствующие формальные параметры. При изменении этих значений в ходе выполнения процедуры (функции) исходные данные (фактические параметры) измениться не могут. Поэтому таким способом передают данные только из вызывающего блока в подпрограмму (т.е. входные параметры). При этом в качестве фактических параметров можно использовать и константы, и переменные, и выражения.
      
      При втором способе (передача по ссылке) все изменения, происходящие в теле процедуры (функции) с формальными параметрами, приводят к немедленным аналогичным изменениям соответствующих им фактических параметров. Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
      
      Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные - по ссылке. Практически это сводится к расстановке в заголовке процедуры (функции) описателя var при всех параметрах, которые обозначают результат работы подпрограммы. Однако, в связи с тем, что функция возвращает только один результат, в ее заголовке использовать параметры-переменные не рекомендуется.
      
      
      
      Локальные и глобальные идентификаторы
      Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В часности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.
      
      Имена, описанные в заголовке или разделе описаний процедуры или функции называют локальными для этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Следует помнить, что формальные параметры прцедур и функций всегда являются локальными переменными для соответствующих блоков.
      
      Основные правила работы с глобальными и локальными именами можно сформулировать так:
      
      Локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называют областью видимости для этих локальных имен.
      Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.
      Глобальные имена хранятся в области памяти, называемой сегментом данных (статическим сегментом) программы. Они создаются на этапе компиляции и действительны на все время работы программы.
      
      В отличие от них, локальные переменные хранятся в специальной области памяти, которая называется стек. Они являются временными, так как создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
      
      Имя, описанное в блоке, "закрывает" совпадающие с ним имена из блоков, содержащие данный. Это означает, что если в двух блоках, один из которых содержится внутри другого, есть переменные с одинаковыми именами, то после входа во вложенный блок работа будет идти с локальной для данного блока переменной. Пременная с тем же имнем, описанная в объемлющем блоке, становится временно недоступной и это продолжается до момента выхода из вложенного блока.
      
      Рекомендуется все имена, которые имеют в подпрограммах чисто внутреннее, вспомогательное назначение, делать локальными. Это предохраняет от изменений глобальные объекты с такими же именами.
      

    * * *

    raplife_round1_romich

     
    Ваша оценка:
  • Прослушать:[mp3,852k]
  • Жанр: Хип-хоп
  •   Задача 165
      
      { Бинарный поиск в упорядоченном массиве }
      label
      bye;
      const
      НВ=10;
      var
      а:array[1..10] of integer; { массив целых }
      obr:integer; { образец для поиска }
      ok: boolean; { TRUE - массив упорядочен }
      sred,verh,niz:integer; { номера среднего, верхнего
      и нижнего эл-тов массива}
      found:boolean;{ признак совпадения с образцом } n:integer; { счетчик сравнений с образцом } i:integer;
      begin
      { ввод массива }
      writeln('*** Бинарный поиск в упорядоченном массиве ***');
      write('Введите массив (в одной строке ',НВ);
      writeln (' целых чисел) и нажмите '); write('->'); for i:=l to HB-1 do
      read(a[i]) ; readln(a[HB]);
      { проверим, является ли массив упорядоченнteln('Средний рост: ',sred:6:1,' см'); writeln ГУ ',m,'-x учеников рост превышает ', 'средний.');
      end
      else writeln('Нет данных для обработки.'); readln; end.
      
      Задача 167
      
      { Вычисление суммы элементов массива (по столбцам) const
      ROW=3; { кол-во строк } COL=5; { кол-во столбцов } var
      a: array[1..ROW,1..COL] of integer; { массив } s: array[1..COL] of integer; { сумма элементов } i,j: integer; begin
      writeln('Введите массив.');
      writeln('После ввода элементов каждой строки,',
      COL,' целых чисел, нажимайте '); for i:=l to ROW do { ROW строк } begin
      write('->');
      for j:=l to COL-1 do
      read(a[i,j]) ; readln(a[i,COL]); end;
      writeln('Введенный массив'); for i:=l to ROW do begin
      for j:=1 to COL-1 do
      write(a[i,j]:4); writeln(a[i,COL]:4); end; { обработка }
      for j:=1 to COL do { для каждого столбца }
      for i:=l to ROW do { суммируем эл-ты одного столбца }
      writeln('---------
      for i:=l to COL do
      write(s[i]:4) ; writeln;
      readln;
      end.
      
      Задача 170
      
      { вычисление определителя матрицы второго порядка } var
      a: array[1..2,1..2] of real; det: real; { определитель (детерминант) } i,j: integer; { индексы массива } begin
      writeln('Введите матрицу второго порядка.'); writeln('После ввода элементов строки нажимайте '); for i:=l to 2 do begin
      write('->'); read(a[i,1]) ; readln(a[i,2]) ; end; det:=a[l,l]*a[2,2] - a[l,2]*a[2,1];
      writeln('Определитель матрицы '); for i:=l to 2 do begin
      for j:=1 to 2 do
      write(a[i,j]:6:2) ; writeln; end;
      writeln('равен ',det:6:2); readln; end.
      
      Задача 171
      
      { Проверяет, является ли матрица магическим квадратом } const
      МАХ=5; { максимальный размер матрицы }
      array[1..МАХ,1..MAX] of integer; { матрица } n: integer; { размер проверяемой матрицы } ok:boolean; { TRUE - матрица является маг. квадратом} i,j: integer; { индексы массива }
      sum: integer; { сумма эл-тов главной диагонали матрицы } temp: integer;{ сумма элементов текущей строки, столбца или второй диагонали матрицы }
      begin
      write('Введите размер матрицы (3..4) ',
      "и нажмите ->'); readln(n);
      Writeln('Введите строки матрицы'); Writeln('После ввода строки',п,' целых чисел,',
      'нажимайте '); for i:=l to n do begin
      write('->');
      for j:=l to n-1 do read(a[i,j]); readln(a[i, n] ) ; end;
      ok:=TRUE; { пусть матрица - магический квадрат } sum:=0;
      { вычислим сумму элементов главной диагонали } for i:=l to n do sum:=sum+a[i,i];
      { вычисляем суммы по строкам}
      i:=l;
      repeat
      temp:=0; { сумма эл-тов текущей строки }
      for j:=l to n do temp:=temp+a [i,j];
      i:=i+l;
      if temp <> sum then ok:=FALSE; until (not ok) or (i > n);
      if ok then
      ( здесь сумма элементов каждой строки равна сумме эл-тов главной диагонали } begin
      { вычисляем суммы по столбцам }
      j:=l;
      repeat
      temp:=0; { сумма эл-тов текущего столбца } for i:=l to n do temp:=temp+a[i,j]; j:=j+l;
      if temp <> sum then ok:=FALSE; until (not ok) or (j > n) ; if ok then
      { здесь сумма эл-тов каждой строки
      равна сумме эл-тов каждого столбца и равна сумме эл-тов главной диагонали} begin
      { вычислим сумму эл-тов второй
      главной диагонали } temp:=0; j:=n;
      for i:=l to n do begin
      temp:=temp+a[i,j];
      end;
      if temp <> sum then ok:=FALSE; end; end;
      write('Введенная матрица '); if not ok
      then write('не ') ;
      writeln('является магическим квадратом.'); readln;
      end.
      
      Задача 173
      
      { Подводит итоги Олимпийских игр } const
      N=10; {количество стран-участниц }
      strana: array[1..N] of string[9]=('Австрия','Германия',
      'Канада','Китай','Корея','Норвегия','Россия', 'США','Финляндия'array[1..МАХ,1..MAX] of integer; ( матрица } n: integer; { размер проверяемой матрицы } ok:boolean; { TRUE - матрица является маг. квадратом} i,j: integer; { индексы массива }
      sum: integer; { сумма эл-тов главной диагонали матрицы ) temp: integer;{ сумма элементов текущей строки, столбца или второй диагонали матрицы }
      begin
      write('Введите размер матрицы (3..4) ',
      'и нажмите ->'); readln(n);
      Writeln('Введите строки матрицы'); Writeln('После ввода строки',п,' целых чисел,',
      1 нажимайте '); for i:=1 to n do begin
      write ('->');
      for j:=l to n-1 do read(a[i,j]); readln(a[i,n]); end;
      ok:=TRUE; { пусть матрица - магический квадрат } sum:=0;
      { вычислим сумму элементов главной диагонали } for i:=1 to n do sum:=sum+a[i,i];
      { вычисляем суммы по строкам}
      i:=l;
      repeat
      temp:=0; ( сумма эл-тов текущей строки }
      for j:=l to n do temp:=temp+a[i,j];
      i:=i+l;
      if temp <> sum then ok:=FALSE; until (not ok) or (i > n) ;
      if ok then
      { здесь сумма элементов каждой строки равна сумме эл-тов главной диагонали }
      begin
      { вычисляем суммы по столбцам }
      repeat
      temp:=0; { сумма эл-тов текущего столбца } . for i:=l to n do temp:=temp+a[i,j]; j:=j+l;
      if temp <> sum then ok:=FALSE; until (not ok) or (j > n) ; if ok then
      { здесь сумма эл-тов каждой строки
      равна сумме эл-тов каждого столбца и равна сумме эл-тов главной диагонали} begin
      ( вычислим сумму эл-тов второй
      главной диагонали } temp:=0; j:=n;
      for i:=l to n do begin
      temp:=temp+a[i,j]; j:=j-l end;
      if temp <> sum then ok:=FALSE; end; end;
      write('Введенная матрица '); if not ok
      then write('не ') ;
      writeln('является магическим квадратом.'); readln; end.
      
      Задача 173
      
      f Подводит итоги Олимпийских игр } const
      N=10; (количество стран-участниц }
      strana: array[1..N] of string[9]=('Австрия','Германия',
      'Канада','Китай','Корея','Норвегия','Россия', 'США','Финляндия'array[1..МАХ,1..MAX] of integer; { матрица ) n: integer; { размер проверяемой матрицы } ok:boolean; { TRUE - матрица является маг. квадратом} i,j: integer; { индексы массива }
      sum: integer; { сумма эл-тов главной диагонали матрицы temp: integer;{ сумма элементов текущей строки, столбца или второй диагонали матрицы }
      begin
      write('Введите размер матрицы (3..4) ',
      'и нажмите ->'); readln(n);
      Writeln('Введите строки матрицы1); Writeln('После ввода строки',п,' целых чисел,',
      'нажимайте '); for i:=1 to n do begin
      write('->');
      for j:=l to n-1 do read(a[i,j]); readln(a[i,n]); end;
      ok:=TROE; { пусть матрица - магический квадрат } sum:=0;
      { вычислим сумму элементов главной диагонали } for i: =1 to n do sum:=sum+a[i,i];
      { вычисляем суммы по строкам}
      i :=1
      repeat
      temp:=0; { сумма эл-тов текущей строки }
      for j:=l to n do temp:=temp+a[i,j];
      i:=i+l;
      if temp <> sum then ok:=FALSE; until (not ok) or (i > n) ;
      if ok then
      { здесь сумма элементов каждой строки равна сумме эл-тов главной диагонали }
      end.
      { вычисляем суммы по столбцам }
      repeat
      temp:=0; { сумма эл-тов текущего столбца } , for i:=l to n do temp:=temp+a[i,j];
      if temp <> sum then ok:=FALSE; until (not ok) or (j > n); if ok then
      ( здесь сумма эл-тов каждой строки
      равна сумме эл-тов каждого столбца и равна сумме эл-тов главной диагонали} begin
      ( вычислим сумму эл-тов второй
      главной диагонали } temp:=0; j:=n;
      for i:=l to n do begin
      temp:=temp+a[i,j];
      end;
      if temp <> sum then ok:=FALSE; end; end;
      write('Введенная матрица '); if not ok
      then write('не '); writeln('является магическим квадратом.');
      readln;
      { Подводит итоги Олимпийских игр } const
      N=10; (количество стран-участниц }
      strana: array[1..N] of string[9]=('Австрия','Германия',
      'Канада','Китай','Корея','Норвегия','Россия', 'США','Финляндия'аблица результатов } result: arrayfl..N+l, 1..5] of integer; { N+1-я строка используется как буфер при сортировке таблицы }
      i,j: integer;
      max: integer; { номер строки таблицы, в которой
      количество очков максимально }
      buf: string[9]; { используется при сортировке } begin
      writeln('Итоги Олимпийских игр');
      writeln('Введите в одной строке количество золотых, ', 'серебряных и бронзовых медалей.');
      { ввод исходных данных } for i:=l to N do begin
      write(strana[i],' ->');
      read(result[i,1],result[i,2]); { кол-во золотых
      и серебряных }
      readln(result[i,3]); { кол-во бронзовых } end;
      { вычислим общее кол-во медалей и очков } for i:=l to N do begin
      result[i,4]:=result[i, 1]+result[i,2]+result[i,3]; result [i,5]:=result[i,1]*7+result[i,2]* 6+result[ i, 3 ] * 5 ;
      end;
      { сортировка массива в соответствии с количеством очков } { методом простого выбора } for i:=l to N-l do begin
      ( в части таблицы начиная со строки i найти j-ю строку, в которой элемент result[j, 5] максимальный }
      max:=i; { пусть это строка с номером i } for j:=i+l to N do
      if result[j,5] > result[max,5] thenmax:=j;
      { Обменяем i-ю строку со строкой с номером max В качестве буфера используем последнюю, не используемую строку таблицы. } buf:=strana[i]; strana[i]:=strana[max]; strana[max]:=buf; for j:=1 to 5 do begin
      result[N+l,j]:=result[ i, j ] ; end;
      for j : =1 to 5 do begin
      result[i,j]:=result[max,j]; end;
      for j:=1 to 5 do begin
      result[max,j]:=result[N+l,j]; end; end;
      { здесь таблица упорядочена }
      writeln;
      writeln('Итоги зимней Олимпиады в Нагано, 1998 г.1);
      writeln{'Страна':12 ,'Золото':8,'Серебро':8,'Бронза':8,
      'Всего':8,'Очков' : 8) ; for i:=l to N do begin
      write(i:2,strana[i]:10); for j:=1 to 5 do
      write(result[i,j]:8); writeln; end; readln; end.
      
      Задача 174
      
      ( Игра "Угадай число" }
      const
      N=3; { уровень сложности - количество цифр в числ
      igrok: array[1..N]of char; { комбинация игрока } comp: array[1..N]of char; { комбинация компьютера }
      a:- arrayfl..N] of boolean; { a[i]= TRUE, если i-я цифра компьютера совпала с одной из цифр игрока }
      ugad:integer;{ угадано чисел }
      mesto:integer;{ из них на своих местах }
      i/ji integer; { индексы массива }begin
      writeln('Компьютер задумал трехзначное число. ',
      'Вы должны его отгадать.'); writeln('После ввода очередного числа, вам будет ',
      'сообщено, сколько цифр'); writeln('угадано и сколько из них находятся ',
      'на своих местах. ') ; writeln('После ввода числа нажимайте .');
      { компьютер "задумывает" свое число }
      randomize;
      for i:=l to N do
      compfi]:=chr(random(lO)+48); ( 48 - код символа '0' }
      write('Компьютер задумал: '); for i:=l to N do write(comp[i]); writeln;
      repeat
      write('Ваш вариант-> '); {получить вариант игрока } for i:=l to N-l do read(igrok[i]); readln(igrok[N]);for i:=l to N do a[i]:=FALSE;
      ( a[i] = TRUE, если i-я цифра числа компьютера
      совпала с одной из цифр числа игрока }
      { проверим, сколько цифр угадано } ugad:=0;
      for i:=l to N do { проверим каждую цифру игрока } for j : =1 to N do begin
      if (igrok[i] = comp[j]) and not a[j] then begin
      ugad:=ugad+l;
      a[j]:=TRUE; { запретим сравнивать
      эту цифру компьютера с оставшимися, еще не проверенными цифрами игрока } end; end;
      { проверим, сколько на своих местах }
      mesto:=0;
      for i:=l to N do
      if igrok[i] = comp[i] then mesto:=mesto+l;
      writeln('Угадано:',ugad,'. На своих местах:',mesto); until (ugad " N) and (mesto = N) ; writeln('***ВЫ УГАДАЛИ ЧИСЛО!***'); write('Нажмите для завершения.'); readln; end.
      
      Задача 175
      
      { Телеграф - передача сообщений при помощи азбуки Морзе. { Замечание: возможно надо увеличить величины задержек. } uses Crt; const
      morse: array[128..159] of string[4] =(
      I I _
      /
      I 1 f
      I I
      I I _ f
      1 I
      I • •
      I I
      . I "___
      I I /
      1 1 /
      _ I I _
      1 1 f
      I 1 I .
      . 1 f .
      {А,Б,В,Г}
      {Д,Е,Ж,3} {И,Й,К,Л} {М,Н,О,П} {Р,С,Т,У} {Ф,Х,Ц,Ч} {Ш,Щ,Ъ,Ы} {Ь,Э,Ю,Я}
      {параметры передачи }
      TONE=100; { частота сигнала (гц) }
      Ы=50; { длительность (мс) "точки" )
      L2=100; ( длительность (мс) "тире"}
      L3=50; { пауза (мс) между точками и тире одной буквы }
      L4=100; { пауза (мс) между буквами }
      L5=150; { пауза (мс) между словами }
      var
      rues : string; sim: string[4];
      { сообщение }
      ( символ в кодировке Морзе -
      последовательность точек и тире }
      { "передаваемый" знак - тире или точка { номер символа и знака }
      znak: string[l] i,j: integer; in
      ClrScr;
      writelnC*** Телеграф ***');
      writeln('Введите сообщение, которое надо передать');
      writeln('(используйте только большие русские буквы)');
      write('->');
      readln(mes);
      for i:=l to Length(mes) do
      begin
      if (mes[i] >= 'A') and (mes[i] <='Я') then begin
      ( определим код очередной буквы (ф-я Ord) сообщения и получим из таблицы кодировки соответствующий элемент массива - последовательность точек и тире sim:=morse[ord(mes[i])]; repeat
      if (sim[j] = •-•) or (sim[j] = begin
      write (sim[j]) ; sound(1000); case sim[j] of 1.': Delay(50); '-': Delay(lOO); end;
      NoSound; Delay(50); end;
      then
      until ((sim[j] = ' ') or (j>4)); Delay(100); { пауза между буквами } end else
      if mes[i] = ' ' then ( пробел между словами } begin
      write(' '); { пробел между словами сообщения } Delay(150); end; end;
      writeln;
      writeln('Сообщение передано!'); writeln('Для завершения работы с программой нажмите ',
      ї'); readln; end.
      
      Задача 177
      
      { Функция max возвращает максимальное из двух чисел function max(a,b: integer): integer; begin
      if a > b
      then max:=a else max:=b; end;
      
      Задача 178
      
      { Возвращает результат сравнения чисел
      в виде символа отношения } function Compare(a,b: real): char; begin
      if a > b then Compare:='>' else
      if a < b then Compare:='<•
      else Compare:='='; end;
      xl,x2: real; { сравниваемые числа }
      res: char; { результат сравнения } begin
      writeln('Введите два числа и нажмите ');
      write('->');
      readln(xl,x2);
      res:=Compare(xl,x2); ( вызов функции программиста }
      writeln(xl:6:2,res,x2:6:2);
      readln; end.
      
      Задача 179
      
      { Вычисляет сопротивление электрической цепи } function Sopr(rl,r2: real; t: integer): real; ( rl,r2 - величины сопротивлений t - тип соединения:
      1 - последовательное;
      2 - параллельное.
      Если тип соединения указан неверно, то возвращает -1 }
      begin
      if t=l then Sopr:= rl+r2;
      if t=2 then Sopr:= rl*r2/(rl+r2)
      else Sopr:=-1; { неверно указан тип соединения} end;
      
      Задача 180
      
      { Вычисление степени числа с использованием свойств логарифмов }
      function InStep(a,b:real):real;
      begin
      ( А в сепени В равно С
      Логарифмируем обе части равенства и получаем: В*In (A) = In (С)
      Нас интересует значение С, поэтому вычисляем Е в степени В*In(А). Значение этого выражения равно С,что и требовалось вычислить. }
      InStep:=exp(b*ln(a)); end;
      var
      a: real; { число }
      b: real; { степень }
      с: real; { число в степени } begin
      writeln('Введите число и показатель степени');
      readln(a,b);
      c:=InStep(a,b);
      writeln(a:6:3,' в степени ',Ь:6:3,' = ',с:б:3);
      readln; end.
      
      
      182
      { вычисляет доход по вкладу }
      function Dohod(sum: real; { сумма вклада }
      stavka: real; { процентная ставка (годовых) } srok: integer { срок вклада (дней) } ): real; begin
      Dohod:=sum*(stavka/100/365)*srok; { 365 кол-во дней
      в году } end;
      
      Задача 183
      
      { Проверяет, является ли символ гласной буквой } Function Glasn(sim:char): boolean; const
      { гласные буквы }
      ListOfGlasn:string ='АаЕеИиОоУуЫыЭэЮюЯя'; var
      p: byte; { позиция проверяемого символа
      в списке гласных } begin
      p:=Pos(sim,ListOfGlasn); { !!!! } if p о 0 { символ найден в списке }
      146
      n Glasn:=True else Glasn:=False;
      end;
      
      Задача 184
      
      { Удаляет из строки начальные пробелы } function LTrim(st: string): string; begin
      while (posC \st) = 1) and (length (st) > 0) do
      delete(st,1,1); LTrim:=st; end;
      { проверка работы функции LTrim} var
      s:string[80]; { строка } begin
      writeln('Удаление из строки начальных пробелов.');
      write('Введите строку ->');•
      readln (s);
      write('Строка без начальных пробелов:',LTrim(s));
      readln; end.
      
      Задача 186
      
      { Преобразование строчных букв в прописные } ( Замещает стандартную процедуру UpCase} function UpCase(st:string): string; var
      i:integer; begin
      for i:=0 to Length(st) do { символы нумеруются с нуля ! } case st[i] of
      { латинские буквы}
      'a'..'z':UpCase[i]:=chr(ord(st[i])-32);
      { русские буквы}
      'a'..'n':UpCase[i]:=chr(ord(st[i])-32);
      'p'..'я':UpCase[i]:=chr(ord(st[i])-80);
      else { остальные символы не преобразуем
      UpCase[i]:=st[i]; end;
      end;
      { пример использования функции UpCase } var
      st: string; begin
      writeln(' Введите текст и нажмите ');
      write('->');
      readln(st);
      writeln(UpCase(st));
      readln; end.
      
      Задача 188
      
      { Решение квадратного уравнения }
      function KvadrUr(a,b,c: real; var xl,x2: real): integer; { a,b,c - коэффициенты уравнения } { xl,x2 - корни уравнения } ( значение функции - количество корней
      или -1, если неверные исходные данные } var
      d: real; ( дискриминант } begin
      if a = 0 then KvadrUr := -1 else begin
      d:=b*b-4*a*c; if d < 0 then
      KvadrUr:=0 { уравнение не имеет решения } else begin if d > О
      then KvadrUr:=2 { два разных корня } else KvadrUr:=1; { корни одинаковые } xl:=(-b+Sqrt(d))/(2*a); x2:=(-b-Sqrt(d))/(2*a); end; end; end;
      сновная программа } var
      a,b,c: real; { коэффициенты уравнения } xl,x2: real; ( корни уравнения } begin
      writeln('Решение квадратного уравнения');
      writeln('Введите в одной строке коэффициенты и нажмите
      ''); write('->'); readln(a,b,с); case KvadrUr(a,b,c,xl,x2) of
      -1: writeln('Ошибка исходных данных.'); 0: writeln('Уравнение не имеет решения.'); 1: writeln('x=',xl:6:2,' Корни одинаковые.'); 2: writelnГxl=',xl:6:2,' х2=',х2:6:2);
      end; readln; end.
      uses Crt; var
      a:integer; { число, введенное пользователем }
      { Функция Getlnt предназначена для ввода целого
      положительного числа, состоящего из одной или двух цифр.
      Во время ввода для редактирования может использоваться
      .
      При нажатии функция возвращает введенное число. }
      function Getlnt:integer; const
      K_BACK=8; { код клавиши }
      K_ENTER=13; { код клавиши } var
      ch:char; { символ }
      dec:byte; { код символа }
      buf:array[l..2] of char; { введенные цифры }
      n:integer; { кол-во введенных цифр }
      x,у:integer; { положение курсора } begin
      buf[1]:=' '; buf[2]:=' ';
      then
      n:=0; repeat
      ch:=Readkey; dec:=ord(ch);
      if (ch>='0') and (ch<='9') and (n<2) begin
      write(ch); n:=n+l; buf[n]:=ch; end else
      if (dec=K_BACK) and (n>0) then begin
      n:=n-l; x:=WhereX; y:=WhereY; GotoXY(x-l,y); write(' '); GotoXY(x-l,y); end;
      until (n>0) and (dec=K_ENTER); { преобразуем введенную строку в число } if n=2
      then Getlnt:=(ord(buf[1])-48)*10+ord(buf[2])-48 else Getlnt:=ord(buf[1])-48; end;
      begin
      ClrScr;
      writeln('*** Демонстрация работы функции Getlnt. ***');
      writeln;
      writeln('Функция Getlnt предназначена для ввода целого
      'положительного числа,');
      writeln('состоящего из одной или двух цифр.'); writeln('Во время ввода для редактирования может ',
      'использоваться .'); writeln('При нажатии функция возвращает ',
      'введенное число.'); writeln;
      writeln('Введите число и нажмите '); write('->');
      teln('ftnH завершения работы программы нажмите ',
      1'); readln; Halt(l); end;
      { полотнище флага }
      SetFillStyle(SolidFill,LightGray); { сплошная заливка
      серым цветом } Ваг(80,80,200,135);
      { кольца }
      SetColor(Green); ( зеленое }
      Circle(100,100,15);
      SetColor(Black); { черное }
      Circle (140,100,15);
      SetColor(Red); { красное }
      Circle(180,100,15);
      SetColor(Yellow); { желтое }
      Circle(120,115,15);
      SetColor(Blue); { синее }
      Circle(160,115,15);
      readln; CloseGraph; end.
      
      Задача 198
      
      { Рисует кораблик с использованием метода базовой точки }
      uses Graph;
      const
      { шаг сетки }
      dx=5; { по X}
      dy=5; ( по Y}
      grDriver:integer; { драйвер }
      grMode:integer; { графический режим }
      grPath:string; { место расположения драйвера }
      ErrCode:integer; { результат инициализации граф. режима }
      х,у:integer; ( координаты базовой точки кораблика
      begin
      grDriver := VGA; grMode:=VGAHi; grPath:='e:\tp\bgi'
      режим VGA}
      разрешение 640x480}
      драйвер, файл EGAVGA.BGI, находится
      в каталоге d:\tp\bgi }
      InitGraph(grDriver, grMode,grPath);
      ErrCode : = GraphResult;
      if ErrCode <> grOk then Halt(l);
      x:=10;
      y:=200;
      { корпус }
      MoveTo(x,y);
      LineTo(x,y-2*dy);
      LineTo(x+10*dx,y-2*dy);
      LineTo(x+ll*dx,y-3*dy);
      LineTo(x+17*dx,y-3*dy);
      LineTo(x+14*dx,y);
      LineTo(x,y);
      { надстройка }
      MoveTo(x+3*dx,y-2*dy);
      LineTo(x+4*dx,y-3*dy);
      LineTo(x+4*dx,y-4*dy);
      LineTo(x+13*dx,y-4*dy);
      LineTo(x+13*dx,y-3*dy);
      Line(x+5*dx,y-3*dy,x+9*dx,y-3*dy);
      { капитанский мостик }
      Rectangle(x+8*dx,y-4*dy,x+ll*dx,y-5*dy);
      { труба }
      Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy);
      { иллюминаторы }
      Circle(x+12*dx,y-2*dy,Trunc(dx/2));
      Circle(x+14*dx,y-2*dy,Trunc(dx/2));
      ( мачта }
      Line(x+10*dx,y-5*dy,x+10*dx,y-10*dy);
      { оснастка }
      MoveTo(x+17*dx,y-3*dy);
      LineTo(x+10*dx,y-10*dy);
      LineTo(x,y-2*dy);
      154
      dln; CloseGraph; end.
      
      Задача 199
      
      { Выводит узор из 100 произвольно размещенных окружностей произвольного радиуса и цвета }
      Uses Graph; var
      grDriver:integer; grMode:integer; grPath:string; ErrCode:integer;
      x,y,r: integer; { координаты центра и радиус окружности } i: integer; begin
      grDriver:=VGA; grMode:=VGAHi; grPath:='e:\tp\bgi'; InitGraph (grDriver,grMode,grPath); ErrCode:=GraphResult; if ErrCode <> grOK then begin
      writeln ('Ошибка инициализации графического режима.1); writeln ('Для завершения работы нажмите '); readln; Halt (1); end;
      Randomize; for i:=l to 100 do begin
      x:=Random(64 0); y:=Random(480); r:=Random(240); Setcolor(Random(16)); Circle(x,y,r); end; readln; end.
      
      Задача 200
      
      { Выводит узор из 200 случайно размещенных линий разного цвета }
      Uses Graph; var
      grDriver:integer; grMode:integer; grPath:string; ErrCode:integer;
      x,y: integer; { координаты конца линии } i: integer; begin
      grDriver:=VGA; grMode:=VGAHi; grPath:='e:\tp\bgi'; InitGraph (grDriver,grMode,grPath); ErrCode:=GraphResult; if ErrCode <> grOK then begin
      writeln ('Сшибка инициализации графического режима.');
      writeln ('Для завершения работы нажмите ');
      readln;
      Halt (1); end;Randomize; for i:=l to 200 do begin
      x:=Random(640); y:=Random(480); Setcolor(Random(16)); LineTo(x,y); end; readln; end.
      
      Задача 201
      
      { Рисует контур пятиконечной звезды } uses Graph;
      el
      bye; var
      r: integer; { радиус звезды )
      хО,уО: integer; { координаты центра звезды }
      х,у: integer; a: integer;
      i: integer;
      { координаты конца луча }
      { угол между осью ОХ и прямой, соединяющей центр звезды и конец луча }
      grDriver: Integer; grMode: Integer; ErrCode: Integer; res: integer;
      begin
      grDriver := detect;
      InitGraph(grDriver, grMode,'e:\tp\bgi');
      ErrCode := GraphResult;
      if ErrCode <> grOk then
      begin
      writelnf'Ошибка инициализации графического режима.'); goto bye; end;
      xO:=100; yO:=100; r:=20;
      a:=18; ( строим от правого гор. луча } x:=xO+Round(r*cos(a*2*pi/360)); y:=yO-Round(r*sin(a*2*pi/360)); MoveTo(x,y); for i:=l to 5 do begin
      a:=a+36;
      x:=xO+Round(r/2*cos(a*2*pi/360));
      y:=yO-Round(r/2*sin(a*2*pi/360));
      LineTo(x,y);
      a:=a+36;
      if a > 360 then a:=18;
      x:=xO+Round(r*cos(a*2*pi/360));
      
      y:=yO-Round(r*sin(a*2*pi/360)); LineTo(x,y); end; readln; bye: end.
      
      Задача 202
      
      ( Рисует пятиконечную звезду }
      uses Graph;
      label
      bye; const
      k=0.01745; { коэф. пересчета величины угла из градусов в радианы к=2*р/360, где р - число "ПИ" }
      г: integer; { радиус звезды }
      x0,y0: integer; ( координаты центра звезды }
      р: array[1..10] of PointType; { координаты концов лучей
      и впадин звезды }
      a: integer;
      i: integer;
      { угол между осью ОХ и прямой, соединяющей центр звезды и конец луча или впадину }
      grDriver: Integer; grMode: Integer; ErrCode: Integer; res: integer;
      begin
      grDriver := detect;
      InitGraph(grDriver, grMode,'e:\tp\bgi');
      ErrCode := GraphResult;
      if ErrCode <> grOk then
      begin
      writeln('Ошибка инициализации графического режима.');
      goto bye; end;
      :=1ОО;
      уО:=1ОО; г:=20;
      а:=18; ( строим от правого гор. луча }
      for i:=l to 10 do
      begin
      if (i mod 2) <> 0 then begin ( луч }
      i].x:=xO+Round(r*cos(a*k)); i].y:=yO-Round(r*sin(a*k)); end else
      begin { впадина }
      p[i].x:=xO+Round(r/2*cos(a*k)); p[i].y:=yO-Round(r/2*sin(a*k)); end;
      a:=a+36;
      if a > 360 then a:=18; end;
      SetFillStyle(SolidFill,Red); FillPoly(10,p); readln; bye: end.
      { Рисует российский флаг }
      uses Graph;
      var
      x,y: integer; { координаты левого верхнего угла флага ) l,h: integer; { длина и высота флага } w: integer; { ширина полосы флага }
      grDriver: Integer; grMode: Integer; ErrCode: Integer; res: integer;
      grDriver := detect;
      InitGraph(grDriver, grMode,'e:\tp\bgi'; ErrCode := GraphResult; if ErrCode = grOk then begin
      x:=100;
      y:=100;
      l:=50;
      h:=25;
      w:=Round(h/3);
      { рисуем флаг }
      SetFillStyle(SolidFill,White);
      Bar(x,y,x+l,y+w);
      SetFillStyle(SolidFill,Blue);
      Bar(x, y+w,x+1,y+2*w);
      SetFillStyle(SolidFill,Red);
      Bar(x,y+2*w,x+l,y+3*w);
      OutTextXY(x,y+h+5,'Россия'); end; readln; CloseGraph; end.
      
      Задача 205
      
      ( Рисует веселую рожицу желтого цвета }
      uses Graph;
      var
      grDriver:integer
      grMode:integer;
      grPath:string;
      ErrCode:integer;
      { драйвер }
      { графический режим }
      { место расположения драйвера }
      { результат инициализации граф. режима }
      begin
      grDriver := VGA; grMode:=VGAHi; grPath:='e:\tp\bgi';
      { режим VGA} { разрешение 64 0x480}
      { драйвер, файл EGAVGA.BGI, находится в каталоге e:\tp\bgi }
      InitGraph(grDriver, grMode,grPath); ErrCode := GraphResult;
      ErrCode <> grOk then begin
      writeln('Ошибка инициализации графического режима.'); writeln('flrm завершения работы программы ',
      'нажмите '); readln; Halt(l); end;
      SetFillStyle(SolidFill,Yellow);
      Setcolor(Yellow); ( чтобы на круге не было линии } PieSlice(100,100,0,360,20); SetColor(Black);
      Arc(100,102,180,360,10); { рот } { глаза } Circle(93,93,2); Circle(107,93,2); readln; CloseGraph; and.
      
      Задача 208
      
      { Выводит узор из концентрических окружностей разного цвета
      Uses Graph;
      var
      grDriver:integer;
      grMode:integer;
      grPath:string;
      ErrCode:integer;
      x,y,r: integer; { координаты центра и радиус окружности }
      dr:' integer; { приращение радиуса окружности }
      i: integer; { счетчик циклов } begin
      grDriver:=VGA;
      grMode:=VGAHi;
      grPath:='e:\tp\bgi';
      InitGraph (grDriver,grMode,grPath);
      ErrCode:=GraphResult;
      if ErrCode <> grOK then
      begin
      writeln ('Ошибка инициализации графического режима.'); writeln ('Для завершения работы нажмите '); readln; Halt (1); end;
      x:=100; y:=100; r:=5; dr:=5; for i:=l to 15 do begin
      SetColor(i); Circle (x,y, r) ; r:=r+dr; end; readln; end. { Вычерчивает узор из окружностей }
      Uses Graph;
      var
      grDriver:integer;
      grMode:integer;
      grPath:string;
      ErrCode:integer;
      x,y: integer;
      r: integer;
      1: integer;
      { координаты центра окружности }
      { радиус окружности }
      { расстояние между центрами окружностей
      i,j: integer; { счетчики циклов } begin
      grDriver:=VGA; grMode:=VGAHi; grPath:='e:\tp\bgi'; InitGraph (grDriver,grMode,grPath); ErrCode:=GraphResult; if ErrCode <> grOK then begin
      writeln ('Ошибка инициализации графического режима.'] writeln ('Для завершения работы нажмите ');
      dln;
      Halt (l);
      end;
      у:=100;
      r:'=20;
      1:=30;
      for i:=1 to 4 do
      begin
      x:=100;
      for j:=l to 5 do
      begin
      Circle (x,y,r) ,
      x:=x+l ;
      end;
      y:=y+l;
      end;
      readln;
      end.
      
      Задача 210
      
      { Вычерчивает узор из квадратов
      Uses Graph;
      var
      grDriver:integer;
      grMode:integer;
      grPath:string;
      ErrCode:integer;
      x,y: integer; { коорд. левого верхнего угла квадрата }
      d: integer; { длина с ;тороны квадрата }
      n: integer; { кол-во квадратов в ряду }
      1: integer; { расстояние между квадратами }
      i,j: integer; ( счетчики циклов }
      begin
      grDriver:=VGA;
      grMode:=VGAHi;
      grPath:='e:\tp\bgi';
      InitGraph (grDriver, grMode grPath);
      ErrCode:=GraphResult
      if ErrCode <> grOK then begin
      writeln ('Ошибка инициализации графического режима.');
      writeln ('Для завершения работы нажмите ');
      readln;
      Halt (1); end; y:=100; d:=30;
      for i:=l to 5 do begin
      if ((i mod 2) = 1)
      then begin { нечетный ряд }
      n:=5; { пять квадратов в ряду } х:=100; end
      else begin { четный ряд } п:=4;
      x:=100+Round(d/2+l/2); end;
      for j : =1 to n do begin
      Rectangle(x,y,x+d,y+d); x:=x+d+l; end;
      y:=y+Round(d/2+l/2) ; end; readln; end.
      
      Задача 211
      
      { рисует на экране шахматную доску } uses Graph;
      var
      хО,уО: integer; { координаты левого верхнего угла доски }
      х,у: integer; { координаты левого верхнего угла клетки }
      w: integer; { размер клетки }
      i,j: integer; { номер строки и колонки }
      grDriver: Integer; grMode: Integer; ErrCode: Integer; res: integer; begin'
      grDriver := detect;
      InitGraph(grDriver, grMode,'e:\tp\bgi');
      ErrCode := GraphResult;
      if ErrCode = grOk then
      begin
      x0:=100;
      y0:=100;
      w:=25;
      x:=xO;
      y:=yO;
      for i:=l to 8 do { восемь строк }
      begin
      for j:=l to 8 do { восемь клеток в строке } begin
      { если сумма номера строки и номера колонки, на пересечении которых* находится клетка, четная, то клетка - коричневая, иначе - желтая } if ((i+j) mod 2) = О
      then SetFillStyle(SolidFill,Brown) else SetFillStyle(SolidFill,Yellow); Bar(x,y,x+w,y+w); x:=x+w; end; x:=xO; y:=y+w;
      end;
      readln;
      end;
      CloseGraph; end. { Рисует флажок } Uses Graph; var
      grDriver:integer;
      grMode:integer; grPath:string; ErrCode:integer;
      flag: array[1..6] of PointType; { коотринаты точек флажка } begin
      grDriver:=VGA; grMode:=VGAHi; grPath:='e:\tp\bgi'; InitGraph (grDriver,grMode,grPath); ErrCode:=GraphResult; if ErrCode <> grOK then begin
      writeln ('Ошибка инициализации графического режима.');
      writeln ('Для завершения работы нажмите ');
      readln;
      Halt (1); end; { задать координаты контура - флажка }
      flag[l] .х flag[2].x flag[3].x flag[4].x flag[5].x flag[6].x
      =100;flag[l].y:=100; =160;flag[2].y:=100; =140;flag[3].y:=120; =160;flag[4].y:=140; =100;flag[5].y:=140; =100;flag[6].y:=100;
      SetFillStyle(SolidFill, Red); FillPoly(6,flag); Line(100,140,100,170); readln; end.
      
      Задача 213
      
      { Выводит на экран паровоз } uses Graph;
      grDriver: Integer; grMode: Integer; ErrCode: Integer; res: integer;
      ,уО: integer; { координаты базовой точки паровоза } dx,dy: integer; { шаг координатной сетки } tr: array[1..15] of PointType; { координаты точек контура
      паровоза }
      begin
      grDriver := detect;
      InitGraph(grDriver, grMode,'e:\tp\bgi');
      ErrCode : = GraphResult;
      if ErrCode = grOk then
      begin
      x0:=100; y0:=100;
      dx:=5; dy:=5;
      { корпус }
      tr[l].y:=yO+7*dy; tr[2].y:=yO+6*dy; tr[3].y:=yO+6*dy; tr[4].y:=yO+3*dy; tr[5].y:=yO+3*dy; tr[6].y:=yO+O*dy; tr[7]".y:=y0+0*dy; fcr[8].y:=yO+3*dy; tr[9].y:=yO+3*dy; tr[10].y:=yO+l*dy; .y:=yO+l*dy;
      tr[1].x:=xO+O*dx;
      tr[2].x:=xO+O*dx;
      tr[3].x:=xO+l*dx;
      tr[4J .x:=xO+l*dx;
      tr[5].x:=xO+2*dx;
      tr[6].x:=xO+2*dx;
      tr[7].x:=xO+3*dx;
      tr[8].x:=xO+3*dx;
      tr[9].x:=xO+7*dx;
      tr[10].x:=xO+7*dx;
      tr[ll].x:=xO+13*dx;
      tr[12].x:=xO+13*dx; tr[12].y:=yO+2*dy;
      tr[13].x:=xO+12*dx; tr[13].y:=yO+2*dy;
      tr[14].x:=xO+12*dx; tr[14].y:=yO+7*dy;
      tr[15].x:=xO+O*dx; tr[15].y:=yO+7*dy;
      DrawPoly(15,tr);
      { окно )
      Rectangle(xO+8*dx,yO+2*dy,x0+10*dx,yO+4*dy),
      { колеса )
      SetFillStyle(SolidFill,Red);
      SetColor(Red);
      PieSlice(xO+3*dx,yO+7*dy, 0,360,l*dx);
      PieSlice(xO+6*dx, yO+7*dy,0,360,l*dx);
      PieSlice(xO+9*dx,yO+7*dy,0,360,l*dx);
      { окантовка колес }
      SetColor(White);
      Circle(xO+3*dx,yO+7*dy,l*dx), Circle(xO+6*dx,yO+7*dy,l*dx), Circle(xO+9*dx,yO+7*dy,l*dx),
      readln; end;
      CloseGraph; end.
      
      Задача 215
      
      { Координатные оси и оцифрованная сетка } program grid; uses Graph;
      var
      xO,yO:integer; { координаты начала координатных осей } dx,dy:integer; { шаг координатной сетки (в пикселах) ) h,w:integer; { высота и ширина области вывода координатной
      сетки > х,у:integer;
      lx,ly:real; ( метки (оцифровка) линий сетки по X Y } dlx, dly:real; { шаг меток (оцифровки) линий сетки по X и Y } st:string; { изображение метки линии сетки }
      grDriver: Integer; grMode: Integer; ErrCode: Integer;
      begin
      grDriver := VGA;
      grMode:=VGAHi;
      InitGraph(grDriver, grMode,'e:\tp\bgi');
      ErrCode := GraphResult;
      if ErrCode <> grOk then Halt(1);x0:=50; yO:=45O; ( оси начинаются в точке (40,450) } dx:=40; dy:=40; ( шаг координатной сетки 40 пикселей } dlx:=0.5; { шаг меток оси X, метками будут:=l;
      шаг меток оси Y, метками будут: 1, 2, и т.д. }
      h: =300;
      w: =400;
      lx :=0;
      iy :=0;
      { начало координат помечается метками 0 )Line(x0,y0,x0,y0-h); { ось X } Line(x0,y0,x0+w,y0); { ось Y }
      { засечки, сетка и оцифровка по оси X }
      х:=х0;
      repeat
      { засечка }
      SetLineStyle(SolidLn, 0, NormWidth);
      Line(x,yO-3,x,yO+3);
      { оцифровка }
      Str(lx:0:l,st);
      OutTextXY(x-8,yO+5,st);
      lx:=lx+dlx;
      { линия сетки }
      SetLineStyle(DottedLn, 0, NormWidth);
      Line(x,yO-3,x,yO-h);
      x:=x+dx; until (x>x0+w);
      { засечки, сетка и оцифровка по оси Y }
      у:=у0;
      repeat
      { засечка }
      SetLineStyle(SolidLn, 0, NormWidth);
      Line(xO-3,y,xO+3,y);
      ( оцифровка }
      Str(ly:0:l,st);
      OutTextXY(xO-40,y,st);
      ly:=ly+dly;
      { линия сетки }
      SetLineStyle(DottedLn, 0, NormWidth);
      Line(x0+3,y,xO+w,y);
      SetLineStyle(SolidLn, 0, NormWidth); y:=y-dy; until (y  Readln; CloseGraph;
      end.
      
      Задача 216
      
      Uses Graph; var
      x,dx: real;
      xl,x2: real;
      y: real;
      mx,my: integer;
      { аргумент и его приращение } ( диапазон изменения аргумента } { значение функции } { масштаб по X и Y - кол-во точек
      экрана, соответствующее единице
      по осям координат } { начало осей координат } { координаты точек на экране }
      хО,уО: integer; рх,ру: integer;
      grDriver:integer; grMode:integer; grPath:string; ErrCode:integer;
      i: integer;
      begin
      grDriver:=VGA;
      grMode:=VGAHi;
      grPath:='e:\tp\bgi';
      InitGraph (grDriver,grMode,grPath);
      ErrCode:=GraphResult;
      if ErrCode <> grOK then
      begin
      writeln ('Ошибка инициализации графического режима.'); writeln ('Для завершения работы нажмите '); readln; Halt (1);
      end;
      :=320; у0:=240;
      тх:=20; ту:=20;
      { оси координат }
      Line(10,y0,630,y0);
      Line(xO,10,xO,470);
      { график }
      xl:=-15;
      х2:=5;
      dx:=0 Л;
      х:=xl;
      while (x  begin
      у:= 0.5*х*х+х*4-3;
      рх:=xO+Round(x*mx);
      py:=yO-Round(y*my) ;
      PutPixel(px,py,White);
      x:=x+dx; end; readln;
      end.
      
      Задача 217
      
      { Движущееся сложное изображение }
      uses Graph, Crt;
      var
      grDriver:integer; { драйвер } grMode:integer; { графический режим } grPath:string; { место расположения драйвера } ErrCode:integer; { результат инициализации граф. режима }
      х,у:integer; { координаты кораблика } color:word; { цвет кораблика } bkcolor:word; { цвет фона экрана }
      { Кораблик }
      Procedure Titanik(x,у:integer; color:word); const
      dx=5;
      dy=5;
      координаты базовой точки } цвет корабля }
      var
      01dColor:word; begin
      01dColor:=GetColor; { сохранить текущий цвет ) SetColor(color); { установить новый цвет }
      { корпус } MoveTo(x,y); LineTo(x,y-2*dy); LineTo(x+10*dx,y-2*dy); LineTo(x+ll*dx,y-3*dy); LineTo(x+17*dx,y-3*dy); LineTo(x+14*dx,у); LineTo(x,у); { надстройка } MoveTo(x+3*dx,y-2*dy); LineTo(x+4*dx,y-3*dy); LineTo(x+4*dx,y-4*dy); LineTo(x+13*dx,y-4*dy); LineTo (x+13*dx,y-3*dy) ; Line(x+5*dx,y-3*dy,x+9*dx,y-3*dy); { капитанский мостик }
      Rectangle(x+8*dx,y-4*dy,x+ll*dx,y-5*dy); { труба }
      Rectangle(x+7+dx,y-4*dy,x+8*dx,y-7*dy); { иллюминаторы }
      Circle(x+12*dx,y-2*dy,Trunc(dx/2)); Circle(x+14*dx,y-2*dy,Trunc(dx/2)); { мачта }
      Line(x+10*dx,y-5*dy,x+10*dx,y-10*dy); ( оснастка } MoveTo(x+17*dx,y-3*dy); LineTo(x+10*dx, y-10*dy) ; LineTo(x,y-2*dy);
      SetColor(OldColor); { восстановить текущий цвет end; begin
      grDriver := VGA; grMode:=VGAHi; grPath:='e:\tp\bgiї;
      режим VGA}
      разрешение 640x480}
      драйвер, файл EGAVGA.BGI, находится
      в каталоге d:\tp\bgi }
      tGraph(grDriver, grMode,grPath);
      ErrCode := GraphResult;
      if ErrCode о grOk then Halt(l);
      x:=10;
      y:=200;
      color:=LightGray;
      SetBkColor(Blue);
      bkcolor:=GetBkColor;
      repeat
      Titanik(x,y,color);
      Delay(lOO);
      Titanik(x,y,bkcolor); { стереть корабль }
      PutPixel(x,y,color); { след от корабля }
      x:=x+2;
      until (x>500);
      OutTextXY(10,10,'Рейс завершен!'); readln; CloseGraph; end.
      нарисовать корабль }
      
      Задача 219
      
      { Обрабатывает результаты контрольной работы
      и отражает их в виде диаграммы } uses Crt, Graph;
      ( возвращает изображение дробного числа} function RealToStr(r: real; n,m: integer): string; var
      st: string; begin
      Str(r:n:m,st); RealToStr:=st; end;
      const
      { подсказка при вводе исходных данных и
      подпись рядом с прямоугольником легенды } mes: array[2..5] of string[10] =
      Сдвоек1,'троек','четверок','пятерок');
      var
      array[2..5] of integer; { количество пятерок, четверок,
      integer;
      array[2..5] of real;
      троек и двоек } { всего оценок } { процент каждой оценки
      array[2..5] of integer; { высоты столбиков диаграмм }
      integer; { номер максимального эл-та массива п integer; { индекс массива }
      х,у: integer; { координаты левого нижнего угла столбика диаграммы }
      grDriver:integer; { драйвер }
      grMode:integer; { графический режим }
      grPath:string; { место расположения драйвера }
      ErrCode:integer; { результат инициализации граф.
      begin
      ( ввод исходных данных }
      TextBackground(Blue);
      TextColor(LightGray) ;
      ClrScr;
      writeln('Обработка результатов контрольной работы');
      writeln('Введите исходные данные:');
      for i:=5 downto 2 do begin
      write(mes[i],' -> '); readln(n[i]); end;
      for i:=2 to 5 do s:=s+n[i]; { всего оценок }
      { вычислим процент каждой оценки } for i:=2 to 5 do p[i]:=(n[i]/s)*100;
      { вычислим высоту каждого столбика диаграммы, } { но сначала определим, каких оценок больше } т:=5; { пусть больше всегоусть количеству оценок, которых больше, соответствует столбик высотой 200 пикселей. Вычислим высоты остальных столбиков. }
      for i:=5 downto 2 do
      . h[i]:=Round( (200/n[m])*n[i] );
      { обработка выполнена, строим диаграмму }
      grDriver := VGA; { режим VGA}
      grMode:=VGAHi; { разрешение 640x480}
      grPath:='e:\tp\bgi'; { драйвер, файл EGAVGA.BGI, находится
      в каталоге e:\tp\bgi } InitGraph(grDriver, grMode,grPath); ErrCode := GraphResult; if ErrCode <> grOk then begin
      writeln('Ошибка инициализации графического режима.1); writeln(',njM завершения работы программы ',
      'нажмите '); readln; Halt (l^-
      { строим диаграмму }
      OuttextXY(40,50,'Результаты контрольной работы'); Rectangle(40,80,170,310);
      х:=50; у:=300; { левый нижний угол первого столбика } { столбики диаграммы } for i:=5 downto 2 do begin
      SetFillStyle(SolidFill,i);
      Bar(x,y,x+10,y-h[i]); { столбик }
      { OutTextXY(x,y-h[i]-10,RealToStr(p[i],5,2)+'%');
      x:=x+20; end;
      { численные значения } x:=50;
      for i:=5 downto 2 do begin
      SetFillStyle(SolidFill,i);
      {Bar(x,y,x+10,y-h[i]); { столбик }
      OutTextXY(x,y-h[i]-10,RealToStr(p[i],5,1)+'%');
      x:=x+20; end;
      { легенда } х:=200;у:=100; for i:=5 down to 2 do begin
      SetFillStyle(SolidFill,i); Bar(x,y,x+20,y+10); { столбик } OutTextXY(x+25,y,raes[i]); y:=y+20; end; readln; CloseGraph; end. { Выводит круговую диаграмму }
      uses Graph;
      const
      N=4; ( количество категорий }
      name: array[1..N] of
      string[10]=('Книги','Журналы','Канцтовары','Прочее'); var
      kol: array[1..N] of real,
      dol: array[l..N] of real;
      sum: real; al,a2: integer; x,y: integer; st: string; i: integer;
      { количество для категории }
      { доля категории в общем
      количестве }
      { общее кол-во по всем категориям { угол начала и конца сектора } ( координаты вывода легенды } { изображение числа }
      grDriver:integer; { драйвер }
      grMode:integer; { графический режим }
      grPath:string; { место расположения драйвера }
      ErrCode:integer; { результат инициализации граф. режима }
      begin
      grDriver := VGA; { режим VGA} grMode:=VGAHi; ( разрешение 640x480} grPath:='e:\tp\bgi'; ( драйвер, файл EGAVGA.BGI, находится
      в каталоге e:\tp\bgi }
      tGraph(grDriver, grMode,grPath); ErrCode := GraphResult; if ErrCode о grOk then begin
      . writeln('Ошибка инициализации графического режима.');
      writeln('Для завершения работы программы ', 'нажмите ');
      readln;
      Halt(l); end;
      { ввод исходных данных }
      writeln('Введите количество по каждой категории'); sum:=0;
      for i:=l to N do begin
      write(name[i],' ->'); readln(kol[i]); sum:=sum+kol[i]; end;
      f вычислим долю каждой категории в общей сумме } for i:=l to N do
      ]:=kol[i]/sum*100;
      { строим диаграмму } al:=0; ( от оси ОХ }
      x:=350; y:=100; { левый верхний угол области легенды } for i:=l to N do begin
      { сектор }
      a2:=al+Round(3.6*Dol[i]); { 1% - 3.6 градуса }
      if a2 > 360 then a2:=360;
      SetFillstyle(SolidFill,i);
      PieSlice(200,200,al,a2,100);
      al:=a2; { следующий сектор - от конца текущего }
      { легенда }
      Ваг(х,у,х+30,у+10);
      Rectangle(х,у,х+30,у+10);
      str(dol[i]:6:1,at);
      OutTextXY(x+50,y,name[i]+' -'
      y:=y+20; end;
      readln; CloseGraph; end.
      
      Задача 221
      
      { Светофор } uses Graph, Crt;
      grDriver: Integer; grMode: Integer; ErrCode: Integer; res: integer;
      i,j: integer; { счетчики циклов }
      { Рисует круг заданного цвета}
      { х,у,г - координаты центра и радиус круга }
      ( fc,bc - цвет круга и окантовки }
      Procedure Krug(x,y,r: integer; fc,bc: integer);
      begin
      SetFillStyle(SolidFill,fc);
      SetColor(fc);
      PieSlice(x,y,0,360,r);
      SetColor(be);
      Circle(x,y,r); end;
      { Основная программа } begin
      grDriver := detect;
      InitGraph(grDriver, grMode,'e:\tp\bgi');
      ErrCode := GraphResult;
      if ErrCode = grOk then
      begin
      OutTextXYdO,10,'Соблюдайте правила уличного движения!'
      Rectangle(88,88,112,152);
      { Горит красный свет }
      KrugdOO, 100,10,Red,White) ;
      Krug(100,120,10,LightGray,White);
      Krug(100,140,10,LightGray,White);
      Начальное положение стрелок: угол
      между стрелкой и осью ОХ равен 90 град. as:=90; am: =90;
      Circle(xO,yO,d+5); SetFillStyle{SolidFill,0); Str(m,stm); repeat
      { вывести секундную стрелку }
      MoveTo(x0,y0);
      SetColor(Yellow);
      Vector(as,d);
      ( вывести минутную стрелку } MoveTo(x0,y0); SetColor(Green); Vector(am,d-10);
      { вывести "цифровые" часы }
      Bar(10,10,50,20);
      Str (s,sts) ;
      OutTextXy(10,10,stm+':'+sts);
      Delay(lOO); { задержка
      { стереть стрелки } SetColor(0); { секундную } MoveTo(x0,y0); Vector(as,d);
      { минутную } MoveTo(x0,y0) ; Vector(am,d-10);
      s:=s+l;
      if s = 60 then
      begin
      m:=m+l; Str (m, stm) ; s:=0;
      Sound(1000); Delay(10); NoSound;
      am:=am-6; { шаг движения минутной
      стрелки б градусов } if am < 0 then am:=354; end;
      as:=as-6;
      if as < 0 then as:=354;
      until KeyPressed; end;
      CloseGraph; end.
      ( Построение графика функции } program groffunc; uses Graph;
      var
      xl,x2:real; yl,y2:real; x:real; y:real; dx:real; l,b:integer; w,h:integer; mx,my:real; xO,yO:integer; st:string;
      {границы изменения аргумента функции }
      { границы изменения значения функции }
      { аргумент функции }
      { значение функции в точке х}
      ( приращение аргумента }
      { левый нижний угол области вывода графика }
      { ширина и высота области вывода графика }
      { масштаб по осям X и Y }
      { точка - начало координат }
      ( изображение числа }
      grDriver: Integer; grMode: Integer; ErrCode: Integer;
      Функция, график которой надо построить } Function f(x:real):reain
      f:=2*Sin(x)*exp(x/5); end;
      Function f2(x:real):real; begin
      f2:=Ln(x); end;
      begin
      grDriver := VGA;
      grMode:=VGAHi;
      InitGraph(grDriver, grMode,'e:\tp\bgi');
      ErrCode := GraphResult;
      if ErrCode о grOk then Halt(l);
      l:=40; b:=400; h:=200; w:=200;
      xl:=0;
      x2:=25;
      dx:=0.01;
      { найдем максимальное и минимальное значения
      функции на отрезке [xl,x2] } yl:=f(xl); { минимум } y2:=f(xl); ( максимум } x:=xl;
      repeat y:=f (x); if yy2 then y2:=y; x:=x+dx; until (x>=x2);
      my:=h/abs(y2-yl); mx:=w/abs(x2-xl); { оси } xO:=l; yO:=b-Abs(Round(yl*my));
      Line(l,b,l,b-h); Line(xO,yO,xO+w,yO); Str(y2:5:l,st); OutTextXY(l+5,b-h,st); Str(yl:5:l,st); OutTextXY(l+5,b,st);
      { построение графика }
      x:=xl;
      repeat
      y:=f(x);
      PutPixel(xO+Round(x*mx),yO-Round(y*my),15);
      x:=x+dx; until (x>=x2); Readln; CloseGraph;
      end.
      
      Задача 224
      
      uses Graph,Crt;
      { в графическом режиме вводит с клавиатуры дробное число } Function GetReal: real; var
      ch: char; { символ нажатой клавиши }
      buf: string[80]; { введенная строка }
      numb: real; { введенное число }
      code: integer; { код ошибки преобразования строки
      в число } begin
      buf:=''; repeat
      { ждем нажатия клавиши, курсор мигает } repeat
      if not KeyPressed then begin
      Setcolor(White);
      Line(GetX,GetY,GetX,GetY+8);
      Delay(250);
      color(Black); Line(GetX,GetY,GetX,GetY+8); end;
      if not KeyPressed then Delay(250); until KeyPressed; { здесь нажата клавиша } ch:=ReadKey; SetColor(White); case ch of
      '0'..'9': begin Outtext(ch); buf:=buf+ch; end; '.': if Pos('.',Buf) = 0 then begin Outtext(ch);
      buf:=buf+ch; end; '-': if Length(buf) " 0 then begin Outtext(ch);
      buf:=ch; end;
      Chr(8): if Length(buf) <> 0 then { нажата } begin
      SetFillStyle(SolidFill,Black); Bar(GetX,GetY,GetX-8,GetY+8); MoveTo(GetX-8,GetY); Delete (Buf,'Length (buf) , 1) ; end; end;
      until ch=Chr(13); Val(buf,numb,code); GetReal:=numb; end; var
      grDriver:integer; { драйвер }
      grMode:integer; { графический режим }
      grPath:string; { место расположения драйвера }
      ErrCode:integer; { результат инициализации граф. режима }
      n: real; { дробное число }
      begin
      grDriver := VGA; { режим VGA} grMode:=VGAHi; { разрешение 64 0x480} grPath:='e:\tp\bgi'; { драйвер, файл EGAVGA.BGI, находится
      в каталоге e:\tp\bgi }
      InitGraph(grDriver, grMode,grPath); ErrCode := GraphResult; if ErrCode <> grOk then begin
      writeln('Ошибка инициализации графического режима.'); writeln('Для завершения работы программы нажмите
      '); readln; Halt(l)i end;
      outtext('Введите целое число -> '); n:=GetReal; readln; CloseGraph; end.
      
      Задача 225
      
      { Создает на диске А: файл и записывает в него
      5 целых чисел, введенных пользователем } var
      f: text; { текстовый файл } n: integer; { число } i: integer; { счетчик чисел } begin
      writeln('Создание файла'); writeln('Введите пять целых чисел.1);
      writeln('После ввода каждого числа нажимайте '); Assign(f,'а:\numbers.txt');
      Rewrite(f); { открыть в режиме перезаписи } for i:=l to 5 do begin
      write('->'); readln(n); writeln(f,n); end;
      close(f); { закрыть файл } writeln('Введенные числа записаны в файл ',
      'а:\numbers.txt'); readln; end.
      
      Задача 226
      
      Дописывает в файл a:\numbers.txt
      пять введенных пользователем целых чисел }
      f: text; { текстовый файл }
      n: integer; { число }
      i: integer; { счетчик чисел }
      begin
      writeln('Добавление в файл a:\numbers.txt'); writeln('Введите пять целых чисел.');
      writeln('После ввода каждого числа нажимайте '); Assign(f,'а:\numbers.txt');
      Append(f); { открыть файл в режиме добавления } for i:=l to 5 do begin
      write('->');
      readln(n);
      writeln(f,n); end; Close(f); { закрыть файл }
      writeln('Введенные числа добавлены в файл ',
      'а:\numbers.txt'); readln;
      end.
      
      Задача 227
      
      { Выводит на экран содержимое файла а:\numbers.txt } var
      f: text; { текстовый файл } n: integer; { число } begin
      writeln('Содержимое файла a:\nunibers.txt1);
      writeln ('-----------------------------') ;
      Assign(f,'a:\numbers.txt'); Reset(f); { открыть файл для чтения } While not EOF(f) do { пока не достигнут конец файла } begin
      readln(f,n); { прочитать число из файла } writeln(n); { вывести прочитанное число на экран } end;
      Close(f); writeln ('-readln;
      закрыть файл
      end.
      
      Задача 228
      
      ( Вычисляет среднее арифметическое чисел, находящихся в файле a:\numbers.txt }
      var
      f: text; { текстовый файл } n: integer; { число, прочитанное из файла } kol: integer; { кол-во прочитанных чисел } sum: integer; { сумма прочитанных чисел ) sa: real; { среднее арифметическое }
      begin
      writeln('Вычисление среднего арифметического чисел, writeln('находящихся в файле a:\numbers.txt'); writeln('Чтение из файла. Подождите.'); sum:=0; kol:-0;
      Assign(f,'a:\numbers.txt'); Reset (f); { открыть файл для чтения } While not EOF(f) do { пока не достигнут конец begin
      readln(f,n); { прочитать число из файла }
      sum:=sum+n;
      kol:=kol+l; end;
      Close(f); { закрыть файл } sa:=sum/kol;
      writeln('Прочитано чисел: ',kol); writeln('Сумма чисел: ',sum) ; writeln('Среднее арифметическое: ',sa:9:2); readln;
      end.
      
      Задача 229
      
      { Выводит на экран содержимое файла, имя которого
      указано пользователем } uses Crt;
      f: text; { текстовый файл }
      fname: string[80]; ( имя файла }
      st: string; { строка, прочитанная из файла }
      'nst: integer; { кол-во выведенных на экран строк
      key: char; { клавиша, нажатая пользователем }
      begin
      ClrScr; { очистить экран } writeln('Просмотр текстового файла');
      writeln('Введите полное имя файла и нажмите '); write('-> '); readln(fname); Assign(f,fname);
      Reset(f); { открыть файл для чтения } ClrScr; nst:=0;
      While not EOF(f) do { пока не достигнут конец файла } begin
      readln(f,st); ( прочитать число из файла } writeln(st); • nst:=nst+l;
      if nst = 23 then { выведены очередные 23 строки } begin
      writeln;
      write('Для продолжения вывода ',
      'нажмите любую клавишу...'); key:=Readkey;
      GotoXY(l,WhereY); { курсор в начало текущей строки } DelLine; { удалить сообщение
      "Для продолжения ..."} nst:=0; end; end;
      Close(f); { закрыть файл } writeln;
      write('Для завершения просмотра нажмите любую ',
      'клавишу...'); key:=Readkey;end.
      
      Задача 230
      
      { Дописывает в файл а:\phone.txt фамилию, имя и номер телефона. Если файла на диске нет, то создает его. } label
      bye; var
      f: text; { текстовый файл } fam: string[15]; { фамилия } name: string[15]; { имя } tel: string[9]; { номер телефона } begin
      writeln('Добавление в телефонный справочник');
      Assign(f,'a:\phone.txt'))
      {$1-}
      Append(f); { сначала откроем в режиме добавления }
      if IOResult <> 0 then
      { вероятно файла phone.txt нет на диске А:}
      { создадим его }
      begin
      Rewrite(f); { открыть в режиме перезаписи } if IOResult О 0 then begin
      writeln('Ошибка обращения к диску А:'); goto bye; end; end;
      { получим данные от пользователя } write('Фамилия ->') ; readln(fam); write('Имя ->'); readln(name); write('Телефон ->') ; readln(tel); { и запишем их в файл } writeln(f,fam); writeln(f,name); writeln(f,tel); close(f); writeln('Информация добавлена.': writeln('Для завершения работы ',
      'нажмите .'); readln; end.
      
      Задача 232
      
      { Поиск в телефонном справочнике }
      label bye;
      var
      f: text; { текстовый файл } obr: string[15]; { фамилия для поиска }
      n: integer; { кол-во записей, удовлетворяющих запросу }
      fam: string[15]; { фамилия } name: string[15]; { имя } tel: string[9]; { номер телефона } begin
      writeln('Поиск в телефонном .справочнике'); Assign(f,'a:\phone.txt');
      reset (f); ( откроем файл для чтения } if IOResult О 0 then
      { вероятно файла phone.txt на диске А: нет } begin
      writeln('Файл a:\phone.txt не доступен'); goto bye; end;
      repeat
      write('Фамилия ->') ; readln(obr);
      if Length(obr) <> 0 then { пользователь ввел строку } begin
      reset(f); { просматриваем файл от начала } n:=0;
      while not EOF(f) do { просматриваем весь файл } begin
      { читаем из файла } readln(f,fam);
      readln(f,name) ; readln(f,tel);
      if fam = obr then { найдена нужная фамилия } begin
      writeln(fam,' ',name, ' ',tel); n:=n+l; end; end; if n = 0 then writeln('Сведений о ' ,
      obr,' нет.'); end;
      until Length(obr) = 0; bye:
      writeln('Для завершения работы нажмите .'); readln; end.
      
      Задача 234
      
      { Универсальная программа тестирования } uses Crt;
      label
      bye;
      fname: string[40]; { имя файла теста } f: text; ( файл теста }
      VsegoVopr: integer; { количество вопросов теста } PravOtv: integer; { количество правильных ответов }
      { для текущего вопроса }
      nOtv: integer; { количество альтернативных ответов }
      prav: integer; { номер правильного ответа)
      Otv: integer; { номер ответа, выбранного пользователем }
      st: string; { строка, читаемая из файла теста } р: integer; { процент правильных ответов }
      1: integer; { счетчик циклов } in
      if ParamCount = 0 then begin
      writeln('He задан файл вопросов теста!'); ' writeln('Командная строка: test ИмяФайлаТеста');
      goto bye; end;
      fname:=ParamStr(1) ; { имя файла из командной строки } Assign(f,fname);
      {$1-} { это директива компилятору, а не коментарий! } Reset (f); { открыть файл для чтения )
      if IOResult <> 0 then begin
      writeln('Не найден файл теста ', fname); goto bye; end;
      writeln('Сейчас Вам будет предложен тест.'); writeln('К каждому вопросу дается несколько вариантов ', 'ответа.'); "
      writeln('Вы должны ввести номер правильного ответа',
      'и нажать клавишу '); writeln;
      writeln('Удачи! Для начала тестирования нажмите '); TextBackGround(Blue); ClrScr; VsegoVopr:=0; Prav:=0;
      while not EOF(f) do begin
      (ClrScr;}
      VsegoVopr:=VsegoVopr+l;
      readln(f,st); { читаем из файла вопрос } TextColor(White);
      writeln(st); { выводим вопрос на экран } readln(f,nOtv,Prav); { читаем кол-во альтернативных
      ответов и номер правильного ответа } TextColor(LightGray);
      for i:=l to nOtv do ( читаем и выводим альтернативные ответы }
      begin
      readln(f,st); writeln(i,'. ',st); end;
      writeln;
      write('Ваш выбор ->'); readln(Otv);
      if Otv = Prav then PravOtv:=PravOtv+l; writeln; end;
      { обработка результата тестирования } { вычислим процент правильных ответов } p:=Round((PravOtv/VsegoVopr)*100); write('Ваша оценка '); case p of
      100:writeln('ОТЛИЧНО!'); 80..99:writeln('ХОРОШО.'); 60..79:writeln('УДОВЛЕТВОРИТЕЛЬНО.); else writeln('ПЛОХО!'); end; bye:
      write('Для завершения работы программы нажмите '); readln; end.
      
      Задача 235
      
      Выводит таблицу пересчета из дюймов в миллиметры на экран, принтер или в файл
      f:text; { файл вывода } fname:string; { имя файла вывода } dest:integer; { 1 - на экран, 2 - на принтер, 3 - в файл }
      d: real; { величина в дюймах }
      m: real; { величина в миллиметрах}
      begin
      writeln('*** Таблица пересчета из дюймов ', 'в миллиметры ***');
      teln('Результат выводить:'); writeln('l - на экран;'); writeln('2 - на принтер;1); writeln('3 - в файл.');
      ' writeln('Введите число от 1 до 3 и нажмите '); write('Ваш выбор -> '); readln(dest); case dest of
      1: fname:=''; {на экран } 2: begin { на принтер } fname:='prn';
      write('Включите принтер и нажмите '); readln; end; 3: begin { в файл }
      write('Задайте имя файла для вывода -> '); readln(fname); end; end;
      assign(f,fname); . rewrite(f);
      writeln(f,' ------------------') ;
      writeln(f,' Дюймы Миллиметры');
      writeln(f,' -------------------') ;
      d:=0.5;
      while d < 10 do begin
      m:=25.4*d; { 1 дюйм - 25,4 мм } writeln(f,d:6:l,m:10:1); d:=d+0.5; end;
      writeln(f,' -------------------');
      close(f); if dest = 3
      then writeln('Таблица записана в файл ',fname);
      writeln('Для завершения работы программы',
      1 нажмите '); readln;
      end.
      
      Задача 236
      
      { Рекурсивная функция "Факториал" } function factorial(k:integer):integer; begin
      if к = 1
      then factorial:=1
      else factorials k*factorial (k-1) ; end;
      var
      n: integer; { число, факториал которого надо вычислить}
      f: integer; ( факториал числа п } begin
      writeln('Вычисление факториала.');
      writeln('Введите число, факториал которого надо ', 'вычислить');
      write ('->');
      readln(n);
      f:=factorial(n);
      writeln('Факториал числа ',n,' равен ',f);
      readln; end.
      
      Задача 237
      
      { Выводит на экран узор } Uses Graph,Crt;
      { Рисует элемент узора } procedure Elem(x,у,r,p: integer);
      { x,y,г - координаты и радиус центра основного
      элемента узора р - порядок узора } begin
      if p>=0 then begin
      Circle(х,у,г); Delay(lOO);
      Elem(x+r,y,Round(r/2),p-l) ; Elem(x,y-r,Round(r/2),p-l); Elem(x-r,y,Round(r/2),p-l);
      m(x,y+r,Round(r/2) end;
      end;
      grDriver:integer; { драйвер }
      grMode:integer; { графический режим }
      grPath:string; { путь к файлу драйвера )
      ErrCode:integer; ( код ошибки графического режима }
      begin
      grDriver:=VGA; grMode:=VGAHi; grPath:='e:\tp\bgi'; InitGraph (grDriver,grMode,grPath); ErrCode:=GraphResult; if ErrCode <> grOK then begin
      writeln ('Ошибка инициализации графического режима.1)
      writeln ('Для завершения работы нажмите ');
      readln;
      Halt (1); end;
      { основная программа }
      Elem(320,240,60,3); { рисуем узор 3-го порядка }
      OutText('Для завершения работы программы ',
      'нажмите ');
      readln; end.
      Используя механизм рекурсии, вычисляет сопротивление n-звенной электрической цепи }
      rl,r2,r3: real; { величины сопротивлений,
      из которых состоит цепь }
      n: integer; { количество звеньев (порядок) цепи } re: real; { сопротивление цепи )
      { величина сопротивления цепи n-го порядка } function Cep(n: integer): real; begin
      if n=l
      then Cep:=Rl+R2+R3 else begin
      rc:=Cep(n-1); Cep:=R2*rc/(R2+rc); end; end;
      { основная процедура } begin
      writeln('Вычисление сопротивления электрической цепи.
      writeln('Введите величины сопротивлений (Ом):');
      write('rl ->');
      readln(rl);
      write Cr2 ->') ;
      readln(r2);
      write('r3 ->');
      readln(r3);
      write('Порядок цепи ->');
      readln(n);
      writelnf'Сопротивление цепи:',Сер(n):6:2,' Ом'); { величины соротивлений передаются
      в процедуру Сер через глобальные
      переменные rl, r2 и гЗ } readln; end.
      
      Задача 239
      
      ( Вычерчивает схему сложной электрической цепи. }
      { При вычерчивании схемы цепи используется рекурсия.}
      Uses Graph;
      const
      { шаг сетки }
      dx=7;
      dy=7;
      river:integer; grMode:integer; grPath:string; ErrCode:integer; x,y: integer;
      k: integer;
      порядок цепи }
      { выводит схему цепи k-ro порядка } Procedure Cep(k: integer; x,y: integer); begin
      SetColor(Green);
      Line (x, y, x+2*dx, y) ;
      Rectangle (x+2*dx,y-dy,x+6*dx,y+dy);
      Line(x+6*dx,y,x+8*dx,y);
      OuttextXY(x+3*dx,y-3*dy,'Rl');
      SetColor(Yellow);
      Line(x+8*dx,y,x+8*dx,y+2*dy);
      Rectangle(x+7*dx,y+2*dy,x+9*dx,y+6*dy);
      Line(x+8*dx,y+6*dy,x+8*dx", y+8*dy) ;
      OuttextXY(x+10Mx,y+2*dy, 'R2') ;
      SetColor(LightGray) ;
      Line(x,y+8*dy,x+2*dx,y+8*dy);
      Rectangle(x+2*dx,y+7*dy,x+6*dx, y+9*dy) ;
      Line(x+6*dx,y+8*dy,x+8*dx, y+8*dy); 1 OuttextXY(x+3*dx,y+5*dy,'R3');
      if k>l then Cep(k-l,x+8*dx,y);
      end;
      begin
      grDriver:=VGA; grMode:=VGAHi; grPath:='e:\tp\bgi'; InitGraph (grDriver,grMode,grPath); ErrCode:=GraphResult; if ErrCode <> grOK then begin
      writeln ('Ошибка инициализации графического режима.1);
      writeln ('Для завершения работы нажмите ');
      readln; Halt (I
      end;
      OutTextXY(10,10,'Введите порядок цепи и нажмите '); readln(k); сер (k, 10,50) ; readln; CloseGraph; end.
      
      Задача 240
      
      { Демонстрация понятия "рекурсия". Программа строит кривую Гильберта. }
      uses Graph, Crt;
      u: integer; { Длина штриха кривой Гильберта }
      ( Заменяет стандартную процедуру для вычерчивания по точкам горизонтальных и вертикальных линий. }
      procedure LineTo(x2,y2: integer); const
      DT = 3; ( задержка между выводом точек линии ) var
      xl,yl: integer;
      х,у : integer; dx: integer; dy: integer;
      color: integer; a,b: real; n: integer; i: integer; begin
      xlt-GetX; yl:=GetY;
      { координаты начала прямой, x2,y2 - координаты конца }
      ( координаты текущей точки }
      { приращение аргумента }
      { приращение у при рисовании вертикальной линии }
      { цвет линии}
      ( коэф-ты уравнения прямой }
      ( кол-во точек }
      xl <> х2 then begin
      ( не вертикальная линия } a:=(y2-yl)/(x2-xl); ' b:=yl-a*xl;
      n:=abs(x2-xl)+l; if х2 > xl then dx:=l else dx:=-l; x:=xl;
      color:=GetColor; for i: =1 to n do begin
      y:=Round(a*x+b); PutPixel(x,y,color); delay(DT); x:=x+dx; end; end
      else begin { вертикальная л^ния } n:=abs(y2-yl); if y2 > yl then dy:=l else dy:=-l; x:=xl; y:=yl;
      color:=GetColor; for i:=l to n do begin
      PutPixel (x, y, color) ; delay(DT); y:=y+dy; end; end;
      PutPixel(x2,y2,color); MoveTo(x2,y2); end;
      { Кривая состоит из четырех элементов: a,b,c и d.
      Каждый элемент строит соответствующая процедура. } procedure a(i:integer); external;
      procedure b(i:integer); external; procedure с(i:integer); external; procedure d(i:integer); external;
      { Элементы кривой. } procedure a(i: integer); begin
      if i > 0 then begin
      d(i-l); LineTo(GetX-u,GetY); a(i-l); LineTo(GetX,GetY+u);
      a(i-l) ; LineTo(GetX+u, GetY) ;
      b(i-l) ;
      end;
      end;
      procedure b(i: integer);
      begin
      if i > 0 then
      begin
      c(i-l) ; LineTo(GetX,GetY-u) ;
      b(i-l) ; LineTo(GetX+u,GetY);
      b(i-l) ; LineTo(GetX,GetY+u);
      a(i-l) ;
      end;
      end;
      procedure c(i: integer);
      begin
      if i > 0 then
      begin
      b(i-l) ; LineTo(GetX+u,GetY);
      c(i-l) ; LineTo(GetX,GetY-u);
      c(i-l) ; LineTo(GetX-u,GetY);
      d(i-l) ;
      end;
      end;
      procedure d(i: integer); begin if i > 0 then in
      a(i-l); LineTo(GetX,GetY+u); d(i-l); LineTo(GetX-u,GetY); d(i-l); LineTo(GetX,GetY-u); •c(i-l); end; end;
      { главная процедура ) var
      grDriver: Integer;
      grMode: Integer;
      ErrCode: Integer;
      res: integer;
      p : integer; ( Порядок кривой Гильберта } st: string; begin
      grDriver := detect;
      InitGraph(grDriver, grMode,'e:\tp\bgi'); ErrCode := GraphResult; if ErrCode = grOk then begin p:=5;
      Str(p:2,st);
      OuttextXY(0,0,'Кривая Гильберта'+st+'-го порядка.'); MoveTo(450,50) ; u:=10; a (p) ; OuttextXY(0,16,'Для завершения работы программы ',
      'нажмите .'); readln; end;
      CloseGraph; end.
      
      Задача 241.
      
      { Программа строит кривую Серпинского.}
      uses Graph, Crt;
      var
      u: integer;
      Длина штриха }
      { LineTo - вычерчивает по точкам линию из те* точки в заданную. Заменяет стандартную процедуру LineTo для того, чтобы можно было видеть процесс вычерчивания. Возможно надо увеличить величину задержки между выводом точек. } procedure LineTo(x2,y2: integer);
      { х2,у2 - координаты конца линии} const
      DT = 3; { задержка между выводом точек линии } var
      xl,yl: integer; { координаты начала прямой } { координаты текущей точки } { приращение аргумента } { приращение у при рисовании
      вертикальной линии } { цвет линии}
      { коэф-ты уравнения прямой } { кол-во точек }
      х,у : integer; dx: integer; dy: integer;
      color: integer; a,b: real; n: integer; i: integer; begin
      xl:=GetX; yl:=GetY; if xl <> x2 then begin
      { не вертикальная линия }
      a:=(y2-yl)/(x2-xl);
      b:=yl-a*xl;
      n:=abs(x2-xl)+l;
      if x2 > xl then dx:=l else dx:=-l;
      x:-xl;
      color:=GetColor;
      for i:=l to n do
      in
      y:=Round(a*x+b); PutPixel(x,y,color); delay(DT); x:=x+dx; end; end
      else begin { вертикальная линия } n:=abs(y2-yl); if y2 > yl then dy:=l else dy:=-l; x:=xl; y:=yl;
      color:=GetColor ; for i:=l to n do begin
      PutPixel(x, y, color); delay(DT);
      y:=y+dy;
      end; end;
      PutPixel(x2,y2,color); MoveTo(x2,y2); end;
      procedure Vector(a: integer; { a - угол между вектором
      и осью ОХ }
      1: integer); ( длина вектора } { Угол задается целым числом от 0 до 7.
      О соответствует нулю градусов, 1-45, 2 - 90 и т. д. var
      x0,y0: integer; ( координаты начала вектора }
      xl,yl: integer; { координаты конца вектора } begin
      xO:=GetX;
      yO:=GetY;
      xl:=Round(xO+l*cos(a*Pi/4) ) ;
      yl:=Round(yO-l*sin(a*Pi/4) ) ;
      LineTo(xl,yl); end;
      { Кривая состоит из четырех элементов: а,Ь,с и d.
      Каждый элемент строит соответствующая процедура. procedure a (i:integer); external; procedure b(i:integer); external; procedure с(i:integer); external; procedure d(i:integer); external;
      ( Элементы кривой. } procedure a(i: integer); begin
      if i > 0 then begin
      a(i-l);Vector(7,u); b(i-l);Vector(0,2*u); d(i-l);Vector(l,u); a(i-l); end; end;
      procedure b(i: integer); begin
      if i > 0 then
      begin
      b(i-l);Vector(5,u) ; c(i-l);Vector(6,2*u) ; a(i-l);Vector(7,u);
      b(i-l) end; end;
      procedure c(i: integer); begin
      if i > 0 then
      begin
      c(i-l);Vector(3,u); d(i-l);Vector(4,2*u); b(i-l);Vector(5,u); c(i-l); end; end;
      cedure d(i: integer); begin
      if i > 0 then
      begin
      d(i-l)/Vector(l,u); a(i-l);Vector(2,2*u); c(i-l);Vector(3,u); d(i-l); end; end;
      ( главная процедура } var
      grDriver: Integer;
      grMode: Integer;
      ErrCode: Integer;
      res: integer;
      p : integer; { Порядок кривой Гильберта } st: string;
      .
      i: integer; begin
      writeln('Демонстрация понятия "рекурсия".'); writeln('Программа строит кривую Серпинского.'); writeln('Введите порядок кривой (1-4) ',
      'и нажмите !); write('->'); readln(p); grDriver := detect;
      InitGraph(grDriver, grMode,'e:\tp\bgi'); ErrCode := GraphResult; if ErrCode = grOk then begin
      Str(p:2,st);
      OuttextXY(0,0,'Кривая Серпинского'+st+'-го порядка.');
      MoveTodO, 30) ;
      u:=5;
      a(p) ; Vector (7, u) ;
      b(p) ; Vector (5, u) ;
      с(р); Vector(3,и); d(p); Vector (1, и) ; OuttextXY(0,16,
      'Для завершения работы программы нажмите .') readln; end;
      CloseGraph; end.
      
      

    * * *

    Romich - esli ya v klube(vs Pal)

     
    Ваша оценка:
  • Прослушать:[mp3,2846k]
  • Жанр: Хип-хоп
  •   мы тут посовещались с K.O , мы знаем что вы большие любители баунса и решили дать вам тему "Когда я в клубе чики чиканят горячо".
      трэк не больше 3 мб, качество не меньше 128.
      
      Задание:
      1. Надо 4 строчки игр слов с буквой "Р". (мы знаем что вы любите эту букву выделять в читках)
      2. В трэке надо упомянуть "Какие же все таки судьи хорошие люди, и я это уже давно знаю, а я баунсер!!!!!!"
      
      
      
      я не хожу по клубам, я полтергейст подвалов,
      у меня бледная кожа, и запах перегара,
      
      у меня велосипед модный, балдырганчик,
      
      
      Если я в клубе чика у чикс как чипсы - хрум!
      на самокате я катаю подруг двууух,
      у входа мне охраники целуют сланцы,
      моё лицо с обложек журналов глянцевых,
      В клубе чика у чик как чипсы - хрум!
      на самокате я катаю сразу двууух,
      у входа мне охранники целуют сланцы,
      моё лицо пацана я не пальцем делан
      
      потягивая пока есть бокалы пиво накатим у бара сто грамм
      пока выпирает в кармане стакан мари-хуа, дон хуан, куууба здесь рядом,
      
      
      
      
      дрова я пора на задний двор,
      
      
      в начале типа молитвы "да простят меня сырые подземелия из подписи на рап.кз
      
      Ви-ай-пи-пати, по-парам девушки парни кружат от жара,
      в дыму кумара, в пОру весны отджарим за щеку,
      долби в десны чиксам пока под шамуписиком,
      при свете свеч ночью ты можешь его звать его пупсиком,
      в тёмном углу на столом, санта-клаус с коксом,
      трубочка из бакса скручена, пудренный нос,
      мною особенно запомнилась особа,
      в шубе из соболя, с крокодильей кожи сапожки,
      походка кошки, ма-не-ры отлажены,
      походу там с моё запястье ширина скважины,
      
      эй красотка, выгни спину, ведь моя головка у твоей вагины,
      я как пришёл и также сгину, что не заметишь позже продажу ключей от порше,
      поршень мой точно в этот вечер примет процедуры во рту дуры, с голивудской улыбкой,
      
      потягиваем пиво пока вино в бокалах водку накатим сто грамм,
      выпирает с карман стакан, сторона моих душевных ран захоронена
      в комнатах стон там, плавно план сыплет в кальян мой братан
      у бара мутит ерша бармен неспеша уже, мари-хуа, дон хуан, куба здесь, рядом...
      
      и какие же всё-таки судьи хорошие люди, но я не баунсёр,
      жажда олимпа заставила выдавить тему про клуб, а не хардкор,
      а вообще-то чики чекайте мой чик из починки корвета
      и чеканьте в моих шахтах также чётко золото, детки...
      
      Если я в клубе чика у чикс как чипсы - хрум!
      на самокате я катаю подруг двууух,
      у входа мне охраники целуют сланцы,
      моё лицо с обложек журналов глянцевых,
      В клубе чика у чик как чипсы - хрум!
      на самокате я катаю сразу двууух,
      у входа мне охранники целуют сланцы,
      моё лицо, ой, веки открываются........
      
      я очнулся на асфальте с подбитым глазом,
      оказалось фэйс-контроль не прошол я сразу....
      
      
      
      
      
      пЭл, твоя пЭсенка спЭта, ведь когда я в клубе чики чиканят горячоууу

    * * *

    romich_battle3

     
    Ваша оценка:
  • Прослушать:[mp3,962k]
  • Жанр: Хип-хоп
  •   Процедуры и функции
      
      В языке Паскаль, как и в большинстве языков программирования, предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму. Это бывает необходимо тогда, когда какой-либо подалгоритм неоднократно повторяется в программе или имеется возможность использовать некоторые фрагменты уже разработанных ранее алгоритмов. Кроме того, подпрограммы применяются для разбиения крупных программ на отдельные смысловые части в соответствии с модульным принципом в программировании.
      
      Для использования подалгоритма в качестве подпрограммы ему необходимо присвоить имя и описать алгоритм по правилам языка Паскаль. В дальнейшем, при необходимости вызвать его в программе, делают вызов подпрограммы упоминанием в нужном месте имени соответствующего подалгоритма со списком входных и выходных данных. Такое упоминание приводит к выполнению входящих в подпрограмму операторов, работающих с указанными данными. После выполнения подпрограммы работа продолжается с той команды, которая непосредственно следует за вызовом подпрограммы.
      
      В языке Паскаль имеется два вида подпрограмм - процедуры и функции.
      
      Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подрограммы в вызывающий блок (результаты работы подпрограммы).
      
      Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.
      
      
      
      Описание и вызов процедур и функций
      Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, перменных. Исполняемая часть содержит собственно операторы процедур.
      
      Формат описания процедуры имеет вид:
      
      procedure имя процедуры (формальные параметры);
       раздел описаний процедуры
      begin
      
       исполняемая часть процедуры
      
      end;
      
      Формат описания функции:
      
      function имя функции (формальные параметры):тип результата;
       раздел описаний функции
      begin
      
       исполняемая часть функции
      
      end;
      
      Формальные параметры в заголовке процедур и функций записываются в виде:
      
      var имя праметра: имя типа
      и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.
      
      Вызов процедуры производится оператором, имеющим следующий формат:
      
      имя процедуры(список фактических параметров);
      Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
      
      Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.
      
      Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду:
      
      имя функции := результат;
      При вызове процедур и функций необходимо соблюдать следущие правила:
      
      количество фактических параметров должно совпадать с количеством формальных;
      соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
      Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.
      
      Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.
      
      var x,y,m,n: integer;
      
      procedure MaxNumber(a,b: integer; var max: integer);
      begin
       if a>b then max:=a else max:=b;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       MaxNumber(x,y,m);
       MaxNumber(2,x+y,n);
       writeln('m=',m,'n=',n);
      end.
      
      Аналогичную задачу, но уже с использованием функций, можно решить так:
      
      var x,y,m,n: integer;
      
      function MaxNumber(a,b: integer): integer;
       var max: integer;
      begin
       if a>b then max:=a else max:=b;
       MaxNumber := max;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       m := MaxNumber(x,y);
       n := MaxNumber(2,x+y);
       writeln('m=',m,'n=',n);
      end.
      
      
      Передача параметров
      
      
      В стандарте языка Паскаль передача параметров может производиться двумя способами - по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке - параметрами-переменными. Последние отличаются тем, что в заголовке процедуры (функции) перед ними ставится служебное слово var.
      
      При первом способе (передача по значению) значения фактических параметров копируются в соответствующие формальные параметры. При изменении этих значений в ходе выполнения процедуры (функции) исходные данные (фактические параметры) измениться не могут. Поэтому таким способом передают данные только из вызывающего блока в подпрограмму (т.е. входные параметры). При этом в качестве фактических параметров можно использовать и константы, и переменные, и выражения.
      
      При втором способе (передача по ссылке) все изменения, происходящие в теле процедуры (функции) с формальными параметрами, приводят к немедленным аналогичным изменениям соответствующих им фактических параметров. Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
      
      Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные - по ссылке. Практически это сводится к расстановке в заголовке процедуры (функции) описателя var при всех параметрах, которые обозначают результат работы подпрограммы. Однако, в связи с тем, что функция возвращает только один результат, в ее заголовке использовать параметры-переменные не рекомендуется.
      
      
      
      Локальные и глобальные идентификаторы
      Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В часности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.
      
      Имена, описанные в заголовке или разделе описаний процедуры или функции называют локальными для этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Следует помнить, что формальные параметры прцедур и функций всегда являются локальными переменными для соответствующих блоков.
      
      Основные правила работы с глобальными и локальными именами можно сформулировать так:
      
      Локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называют областью видимости для этих локальных имен.
      Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.
      Глобальные имена хранятся в области памяти, называемой сегментом данных (статическим сегментом) программы. Они создаются на этапе компиляции и действительны на все время работы программы.
      
      В отличие от них, локальные переменные хранятся в специальной области памяти, которая называется стек. Они являются временными, так как создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
      
      Имя, описанное в блоке, "закрывает" совпадающие с ним имена из блоков, содержащие данный. Это означает, что если в двух блоках, один из которых содержится внутри другого, есть переменные с одинаковыми именами, то после входа во вложенный блок работа будет идти с локальной для данного блока переменной. Пременная с тем же имнем, описанная в объемлющем блоке, становится временно недоступной и это продолжается до момента выхода из вложенного блока.
      
      Рекомендуется все имена, которые имеют в подпрограммах чисто внутреннее, вспомогательное назначение, делать локальными. Это предохраняет от изменений глобальные объекты с такими же именами.
      

    * * *

    romich_kzmz3_pobeg

     
    Ваша оценка:
  • Прослушать:[mp3,2302k]
  • Жанр: Хип-хоп
  • Солнце било лучами в затылки тех кого,
    вели на холм под конвоем, руки связаны,
    за спиною так что вены от цепей синели,
    Три посмертно будучи распятых на кресте,
    Два разбойника, а третий невиновный философ,
    Если истина рядом, то пал Ершалаим,
    Где-то в далеке на севере сверкали молнии,
    Солдат латы слепили прелемлонием света,
    Проклиная осуждённых за то что,
    Три часа под палящим солнцем плавились,
    Их оголённые участки кожи между доспехами,
    Пехоты ряды пресекали побег,
    после два кола из стали вбили в ладони,
    На вершине каждому кто наплевал на закон,
    Палач с копьём на наконечнике губка,
    Протянута к губам поочерёдно трём,
    Ибо влаги испить на казни дело святое,
    В это время тучи настигали, капли плакали,
    С неба капая падали в лицо Понтий Пилата,
    Его голова гудела, а сердца пронзались,
    остриём через лохмотья старых одеяний,
    Кровь лилась из груди на крестах ряспятых,
    таким образом был совершён побег поневоле,
    Из мира сего скорей всего в рай.
    
    
    Пульс, смолк, вороны клевали,
    глаза и мягкой плоти атомы,
    
    Пульс, смолк, вороны клевали,
    глаза и мягкой плоти материю,
    
    Пульс, смолк, вороны клевали,
    глаза и мягкой плоти части,
    
    Пульс смолк, вороны клевали,
    глаза и мягкую плоть рвали.
    
    
    

    * * *

    romich_r2

     
    Ваша оценка:
  • Прослушать:[mp3,1318k]
  • Жанр: Хип-хоп
  •   Процедуры и функции
      
      В языке Паскаль, как и в большинстве языков программирования, предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму. Это бывает необходимо тогда, когда какой-либо подалгоритм неоднократно повторяется в программе или имеется возможность использовать некоторые фрагменты уже разработанных ранее алгоритмов. Кроме того, подпрограммы применяются для разбиения крупных программ на отдельные смысловые части в соответствии с модульным принципом в программировании.
      
      Для использования подалгоритма в качестве подпрограммы ему необходимо присвоить имя и описать алгоритм по правилам языка Паскаль. В дальнейшем, при необходимости вызвать его в программе, делают вызов подпрограммы упоминанием в нужном месте имени соответствующего подалгоритма со списком входных и выходных данных. Такое упоминание приводит к выполнению входящих в подпрограмму операторов, работающих с указанными данными. После выполнения подпрограммы работа продолжается с той команды, которая непосредственно следует за вызовом подпрограммы.
      
      В языке Паскаль имеется два вида подпрограмм - процедуры и функции.
      
      Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подрограммы в вызывающий блок (результаты работы подпрограммы).
      
      Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.
      
      
      
      Описание и вызов процедур и функций
      Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, перменных. Исполняемая часть содержит собственно операторы процедур.
      
      Формат описания процедуры имеет вид:
      
      procedure имя процедуры (формальные параметры);
       раздел описаний процедуры
      begin
      
       исполняемая часть процедуры
      
      end;
      
      Формат описания функции:
      
      function имя функции (формальные параметры):тип результата;
       раздел описаний функции
      begin
      
       исполняемая часть функции
      
      end;
      
      Формальные параметры в заголовке процедур и функций записываются в виде:
      
      var имя праметра: имя типа
      и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.
      
      Вызов процедуры производится оператором, имеющим следующий формат:
      
      имя процедуры(список фактических параметров);
      Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
      
      Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.
      
      Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду:
      
      имя функции := результат;
      При вызове процедур и функций необходимо соблюдать следущие правила:
      
      количество фактических параметров должно совпадать с количеством формальных;
      соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
      Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.
      
      Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.
      
      var x,y,m,n: integer;
      
      procedure MaxNumber(a,b: integer; var max: integer);
      begin
       if a>b then max:=a else max:=b;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       MaxNumber(x,y,m);
       MaxNumber(2,x+y,n);
       writeln('m=',m,'n=',n);
      end.
      
      Аналогичную задачу, но уже с использованием функций, можно решить так:
      
      var x,y,m,n: integer;
      
      function MaxNumber(a,b: integer): integer;
       var max: integer;
      begin
       if a>b then max:=a else max:=b;
       MaxNumber := max;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       m := MaxNumber(x,y);
       n := MaxNumber(2,x+y);
       writeln('m=',m,'n=',n);
      end.
      
      
      Передача параметров
      
      
      В стандарте языка Паскаль передача параметров может производиться двумя способами - по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке - параметрами-переменными. Последние отличаются тем, что в заголовке процедуры (функции) перед ними ставится служебное слово var.
      
      При первом способе (передача по значению) значения фактических параметров копируются в соответствующие формальные параметры. При изменении этих значений в ходе выполнения процедуры (функции) исходные данные (фактические параметры) измениться не могут. Поэтому таким способом передают данные только из вызывающего блока в подпрограмму (т.е. входные параметры). При этом в качестве фактических параметров можно использовать и константы, и переменные, и выражения.
      
      При втором способе (передача по ссылке) все изменения, происходящие в теле процедуры (функции) с формальными параметрами, приводят к немедленным аналогичным изменениям соответствующих им фактических параметров. Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
      
      Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные - по ссылке. Практически это сводится к расстановке в заголовке процедуры (функции) описателя var при всех параметрах, которые обозначают результат работы подпрограммы. Однако, в связи с тем, что функция возвращает только один результат, в ее заголовке использовать параметры-переменные не рекомендуется.
      
      
      
      Локальные и глобальные идентификаторы
      Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В часности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.
      
      Имена, описанные в заголовке или разделе описаний процедуры или функции называют локальными для этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Следует помнить, что формальные параметры прцедур и функций всегда являются локальными переменными для соответствующих блоков.
      
      Основные правила работы с глобальными и локальными именами можно сформулировать так:
      
      Локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называют областью видимости для этих локальных имен.
      Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.
      Глобальные имена хранятся в области памяти, называемой сегментом данных (статическим сегментом) программы. Они создаются на этапе компиляции и действительны на все время работы программы.
      
      В отличие от них, локальные переменные хранятся в специальной области памяти, которая называется стек. Они являются временными, так как создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
      
      Имя, описанное в блоке, "закрывает" совпадающие с ним имена из блоков, содержащие данный. Это означает, что если в двух блоках, один из которых содержится внутри другого, есть переменные с одинаковыми именами, то после входа во вложенный блок работа будет идти с локальной для данного блока переменной. Пременная с тем же имнем, описанная в объемлющем блоке, становится временно недоступной и это продолжается до момента выхода из вложенного блока.
      
      Рекомендуется все имена, которые имеют в подпрограммах чисто внутреннее, вспомогательное назначение, делать локальными. Это предохраняет от изменений глобальные объекты с такими же именами.
      

    * * *

    romich_r3

     
    Ваша оценка:
  • Прослушать:[mp3,1884k]
  • Жанр: Хип-хоп
  •   Процедуры и функции
      
      В языке Паскаль, как и в большинстве языков программирования, предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму. Это бывает необходимо тогда, когда какой-либо подалгоритм неоднократно повторяется в программе или имеется возможность использовать некоторые фрагменты уже разработанных ранее алгоритмов. Кроме того, подпрограммы применяются для разбиения крупных программ на отдельные смысловые части в соответствии с модульным принципом в программировании.
      
      Для использования подалгоритма в качестве подпрограммы ему необходимо присвоить имя и описать алгоритм по правилам языка Паскаль. В дальнейшем, при необходимости вызвать его в программе, делают вызов подпрограммы упоминанием в нужном месте имени соответствующего подалгоритма со списком входных и выходных данных. Такое упоминание приводит к выполнению входящих в подпрограмму операторов, работающих с указанными данными. После выполнения подпрограммы работа продолжается с той команды, которая непосредственно следует за вызовом подпрограммы.
      
      В языке Паскаль имеется два вида подпрограмм - процедуры и функции.
      
      Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подрограммы в вызывающий блок (результаты работы подпрограммы).
      
      Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.
      
      
      
      Описание и вызов процедур и функций
      Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, перменных. Исполняемая часть содержит собственно операторы процедур.
      
      Формат описания процедуры имеет вид:
      
      procedure имя процедуры (формальные параметры);
       раздел описаний процедуры
      begin
      
       исполняемая часть процедуры
      
      end;
      
      Формат описания функции:
      
      function имя функции (формальные параметры):тип результата;
       раздел описаний функции
      begin
      
       исполняемая часть функции
      
      end;
      
      Формальные параметры в заголовке процедур и функций записываются в виде:
      
      var имя праметра: имя типа
      и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.
      
      Вызов процедуры производится оператором, имеющим следующий формат:
      
      имя процедуры(список фактических параметров);
      Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
      
      Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.
      
      Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду:
      
      имя функции := результат;
      При вызове процедур и функций необходимо соблюдать следущие правила:
      
      количество фактических параметров должно совпадать с количеством формальных;
      соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
      Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.
      
      Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.
      
      var x,y,m,n: integer;
      
      procedure MaxNumber(a,b: integer; var max: integer);
      begin
       if a>b then max:=a else max:=b;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       MaxNumber(x,y,m);
       MaxNumber(2,x+y,n);
       writeln('m=',m,'n=',n);
      end.
      
      Аналогичную задачу, но уже с использованием функций, можно решить так:
      
      var x,y,m,n: integer;
      
      function MaxNumber(a,b: integer): integer;
       var max: integer;
      begin
       if a>b then max:=a else max:=b;
       MaxNumber := max;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       m := MaxNumber(x,y);
       n := MaxNumber(2,x+y);
       writeln('m=',m,'n=',n);
      end.
      
      
      Передача параметров
      
      
      В стандарте языка Паскаль передача параметров может производиться двумя способами - по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке - параметрами-переменными. Последние отличаются тем, что в заголовке процедуры (функции) перед ними ставится служебное слово var.
      
      При первом способе (передача по значению) значения фактических параметров копируются в соответствующие формальные параметры. При изменении этих значений в ходе выполнения процедуры (функции) исходные данные (фактические параметры) измениться не могут. Поэтому таким способом передают данные только из вызывающего блока в подпрограмму (т.е. входные параметры). При этом в качестве фактических параметров можно использовать и константы, и переменные, и выражения.
      
      При втором способе (передача по ссылке) все изменения, происходящие в теле процедуры (функции) с формальными параметрами, приводят к немедленным аналогичным изменениям соответствующих им фактических параметров. Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
      
      Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные - по ссылке. Практически это сводится к расстановке в заголовке процедуры (функции) описателя var при всех параметрах, которые обозначают результат работы подпрограммы. Однако, в связи с тем, что функция возвращает только один результат, в ее заголовке использовать параметры-переменные не рекомендуется.
      
      
      
      Локальные и глобальные идентификаторы
      Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В часности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.
      
      Имена, описанные в заголовке или разделе описаний процедуры или функции называют локальными для этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Следует помнить, что формальные параметры прцедур и функций всегда являются локальными переменными для соответствующих блоков.
      
      Основные правила работы с глобальными и локальными именами можно сформулировать так:
      
      Локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называют областью видимости для этих локальных имен.
      Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.
      Глобальные имена хранятся в области памяти, называемой сегментом данных (статическим сегментом) программы. Они создаются на этапе компиляции и действительны на все время работы программы.
      
      В отличие от них, локальные переменные хранятся в специальной области памяти, которая называется стек. Они являются временными, так как создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
      
      Имя, описанное в блоке, "закрывает" совпадающие с ним имена из блоков, содержащие данный. Это означает, что если в двух блоках, один из которых содержится внутри другого, есть переменные с одинаковыми именами, то после входа во вложенный блок работа будет идти с локальной для данного блока переменной. Пременная с тем же имнем, описанная в объемлющем блоке, становится временно недоступной и это продолжается до момента выхода из вложенного блока.
      
      Рекомендуется все имена, которые имеют в подпрограммах чисто внутреннее, вспомогательное назначение, делать локальными. Это предохраняет от изменений глобальные объекты с такими же именами.
      

    * * *

    round1_under-rec-battle

     
    Ваша оценка:
  • Прослушать:[mp3,1106k]
  • Жанр: Хип-хоп
  •   Задача 105
      
      ( Вычисление суммы ряда 1+1/2+1/3+ ... }
      var
      n: integer; { кол-во суммируемых членов ряда }
      i:integer; { номер элемента ряда }
      elem:real; { значение элемента ряда }
      summ:real; { сумма элементов ряда }
      begin
      writeln('Вычисление частичной суммы ряда 1+1/2+1/3+...');
      writeln('Введите кол-во суммируемых членов ряда');
      write('->');
      readln(n);
      suinm:=O;
      for i:=1 to n do
      begin
      elem:=l/i;
      summ: =suimH-elem; end;
      write('Сумма первых *,n); writeln(' членов ряда равна ', suram: 6: 4) ; readln;
      end.
      
      Задача 106
      
      { Таблица степеней двойки } vax
      n: integer; { показатель степени } x: integer; { значение 2 в степени п } begin
      writeln('Таблица степеней двойки'); х:=1;
      for n:=0 to 10 do begin
      writeln(n:2,x:6); x:=x*2; end; readln; end.
      
      Задача 108
      
      { Таблица функции } const
      LB=-2; { нижняя граница диапазона изменения аргумента }
      НВ=2; { верхняя граница диапазона изменения аргумента }
      DX=0.5; { приращение аргумента } var
      х,у: real; { аргумент и значение функции }
      n: integer; { кол-во точек }
      i: integer; { счетчик циклов }96 in
      n:=Round((HB - LB)/DX)+1;
      x:=LB;
      writelnC-------------------') ;
      writeln(' x I y');
      writeln('-------------------') ;
      for i:=1 to n do begin
      y:=-2.4*x*x+5*x-3; writeln(x:8:2,' I ',y:8:2); x:=x+DX; end;
      writelnC-------------------') ;
      readln; end.
      
      Задача 111
      
      { Вычисляет среднее арифметическое последовательности
      дробных чисел, вводимой с клавиатуры } const
      L=5; { длина последовательности } var
      a: real; { число }
      n: integer; { кол-во введенных чисел } sum: real; { сумма введенных чисел }
      sred: real; { среднее арифметическое введенных чисел } begin
      writeln('Обработка последовательности дробных чисел'); writeln('После ввода каждого числа нажимайте '); sum:=0;
      for n:=l to L do begin
      write('->'); readln(a); sum:=sum+a; sred:=sum/n;
      writelnf'Введено чисел:',п:3, ' Сумма: ', sum:6:2, ' Сред.арифметическое:',sred:6:2); end;
      writeln('Для завершения работы программы нажмите '); readln; end.
      
      Задача 112
      
      { Вычисляет среднее арифметическое и определяет
      минимальное и максимальное число последовательности
      дробных чисел, вводимых с клавиатуры } var
      a: real; { очередное число }
      n: integer; { количество чисел }
      sum: real; ( сумма введенных чисел }
      sred: real; { среднее арифметическое }
      min: real; ( минимальное число последовательности }
      max: real; { максимальное число последовательности }
      i: integer; { счетчик циклов }
      begin
      writeln('Обработка последовательности дробных чисел.'); write ('Введите количество чисел последовательности ->'); readln(п);
      writeln('Вводите последовательность.'); writeln('После ввода каждого числа нажимайте '); write('->');
      readln(a); { вводим первое число последовательности } { предположим, что:}
      min:=a; { первое число является минимальным } шах:=а; { первое число является максимальным } sum:=a;
      { введем остальные числа } for i:=l to n-1 do begin
      write('->');
      readln(a);
      sum:=sum+a;
      if a < min then min:=a;
      if a > max then max:=a; end; sred:=sum/n;
      teln('Количество чисел:*,п); writeln('Среднее арифметическое:',sred:6:2); writeln('Минимальное число:',min:6:2); writeln('Максимальное число:',шах:б:2);
      writeln('Для завершения работы программы нажмите '); readln; end.
      
      Задача 114
      
      ( Генерирует три последовательности случайных чисел и вычисляет среднее арифметическое каждой последовательности } const
      N=3; { кол-во последовательностей } L=10; { длина последовательности ) var
      г: integer; ( случайное число } sum: integer; { сумма чисел последовательности } sred: real; ( среднее арифметическое } i,j: integer; { счетчики циклов } begin
      writeln('Случайные числа');
      Randomize; { инициализация генератора случ. чисел } for i:=l to N do begin
      { генерируем последовательность } sum:=0; { не забыть обнулить ! } for j:=1 to L do begin
      r:=Random(10)+1; write(r:3); sum:=sum+r; end;
      sred:=sum/L;
      writeln(' Сред.арифм.: ',sred:6:2); end;
      writeln('Для завершения работы программы нажмите '); readln; and.
      
      
      Задача 116
      
      ( Таблица функции у"|х| } const
      LB=-4; { нижняя граница диапазона изменения аргумента } НВ=4; ( верхняя граница диапазона изменения аргумента } DX=0.5; { приращение аргумента } var
      х,у: real; { аргумент и значение функции } n: integer; ( кол-во точек } 1: integer; { счетчик циклов } begin
      writeln('Таблица значений функции у=IхI '); n:=Round((НВ - LB)/DX)+1; x:=LB;
      for i:=l to n do begin
      y:=Abs(x);
      writeln(x:6:2,y:6:2); x:=x+DX; end; readln; end.
      
      Задача 119
      
      { Вьшодит таблицу умножения на 7 } var
      m: integer; { число, для которого надо вывести таблицу умножения (множимое) }
      n: integer; { множитель }
      р: integer; { произведение } begin
      m:=7;
      for n:=l to 10 do
      begin
      p:=ra*n;
      writeln(m,'x',n,' =', p) ;
      end;
      readln; { чтобы результат не исчезал с экрана } end.
      Задача 120
      
      ( Преобразование десятичного числа в двоичное } var
      dec:'integer; { десятичное число }
      v: integer; { вес формируемого разряда }
      i: integer; { номер формируемого разряда } begin
      writeln('Преобразование десятичного числа в двоичное');
      writeln('Введите целое число от 0 до 255 и нажмите ',
      ''); write('->'); readln(dec);
      write('Десятичному числу ',dec,' соответствует двоичное '); v:=128; { вес старшего разряда } for i:=l to 8 do begin
      if dec >= v then begin
      write('1'); dec:=dec-v; end
      else write('0'); v:=Round(v/2); { вес следующего разряда в два раза }
      { меньше веса текущего разряда } end; readln; end.
      
      Задача 121
      
      { Выводит на экран квадрат Пифагора - таблицу умножения. } var
      i,j: integer; { номер строки и столбца таблицы }
      р: integer; { произведение i на j } begin
      write('':4); { левая верхняя клетка таблицы }
      for j:=l to 10 do { первая строка - номера столбцов } write(j:4);
      writeln;
      for i:=l to 10 do
      
      101
      begin
      write(i:4); { номер строки } for j:=l to 10 do { строка таблицы }
      write(i*j:4) ; writeln; end;
      readln; { чтобы результат не исчезал с экрана } end.
      
      Задача 122
      
      { Вычисление суммы ряда 1 -1/3 + 1/5 - 1/7 + ... } var
      х: real; { член ряда }
      n: integer; { количество суммируемых членов } summ: real; { частичная сумма } i: integer; { счетчик циклов } begin
      writeln('Вычисление суммы ряда 1 -1/3 + 1/5 - 1/7 + ...'); write('Введите кол-во суммируемых членов ряда ->'); readln(п); summ:=0;
      for i: = 1 to n do begin
      x:=l/(2*i - 1); if (i mod 2) = 0 then x:=-l*x; summ:=summ+x; end;
      writeln('Сумма ряда: ',summ:8:6);
      writeln('Значение pi/4 ',pi/4:8:6); { pi - именованная
      константа } readln; end.
      
      Задача 123
      
      { Приближенное вычисление интеграла методом прямоугольников } var
      a,b: real; { границы отрезка }
      dx: real; ( приращение аргумента (величина интервалreal; { приближенное значение интеграла} n: integer; { количество интервалов } х: real; { аргумент }
      у: real; { значение функции в начале интервала } 1: integer; begin
      writeln('Приближенное вычисление интеграла');
      write('Нижняя граница отрезка -> ');
      readln(a);
      write('Верхняя граница отрезка -> ');
      readln(b);
      write('Приращение аргумента -> ');
      readln(dx);
      n:=Round((b-a)/dx);
      x: =a ;
      s:=0;
      for i:=l to n do
      begin
      y:=5*x*x-x+2; { значение функции в начале интервала }
      s:=s+y*dx; •
      x:=x+dx; end;
      writeln{'Значение интеграла: *,s:9:3);
      writeln('Для завершения работы программы нажмите '); readln; end.
      
      Задача 124
      
      { Приближенное var
      a,b: real;
      dx: real;
      s: real; n: integer; x: real; yl,y2: real;
      i: integer;
      вычисление интеграла методом трапеций }
      { границы отрезка }
      { приращение аргумента (величина интервала)}
      { приближенное значение интеграла} { количество интервалов } { аргумент }
      { значение функции в начале и в конце интервала }
      begin
      writeln('Приближенное вычисление интеграла1);
      write('Нижняя граница отрезка -> ');
      readln(a);
      write('Верхняя граница отрезка -> ');
      readln(b);
      write('Приращение аргумента -> ');
      readln(dx);
      n:=Round((b-a)/dx);
      x: =a;
      s:=0;
      for i:=l to n do
      begin
      yl:=5*x*x-x+2; { значение ф-и в начале интервала }
      x:=x+dx;
      у2:=5*х*х-х+2; { значение ф-и в конце интервала }
      s:=s+(yl+y2)*dx/2; end;
      writeln('Значение интеграла: ',8:9:3);
      writelnf'Для завершения работы программы нажмите '); readln; end.
      
      Задача 126
      
      { Преобразование десятичного числа в двоичное } var
      dec: integer; { десятичное число }
      v: integer; { вес формируемого разряда }
      i: integer; { номер формируемого разряда } begin
      writeln('Преобразование десятичного числа в двоичное');
      writeln('Введите целое число от 0 до 255 и нажмите ', '');
      write('->');
      readln(dec);
      write('Десятичному числу ',dec,' соответствует двоичное ');
      v:=128; { вес старшего (восьмого) разряда )
      for i:=l to 8 do
      in
      if dec >= v then begin
      write('1');
      dec:=dec-v; end else write('0');
      v:=Round(v/2); { вес следующего разряда в два раза меньше }
      end;
      readln; end.
      
      Задача 127
      
      ( Программа проверяет знание таблицы умножения }
      uses Crt;
      var
      numbl, пштЬ2:integer; { Первое и* второе число }
      res:integer; ( Результат умножения первого числа на второе }
      otv:integer; { Ответ испытуемого }
      kol:integer; { Количество правильных ответов }
      i:integer;
      begin
      ClrScr; { очистить экран }
      writeln(' *** Проверка знания таблицы умножения ***•);
      writeln(' После примера введите ответ и нажмите .');
      writeln;
      kol:=0; ( правильных ответов )
      Randomize; ( инициализация генератора случайных чисел }
      for i:=l to 10 do { 10 примеров }
      begin
      numbl:=Random(9)+ 1;
      numb2:=Random(9)+1;
      res:=numbl * numb2;
      write(' (,numbl,'x',numb2,'=');
      readln(otv);
      if otv=res
      then
      kol:=kol+l else begin
      writeln(' Вы ошиблись! ',numbl,'*',numb2,'=',res);
      end; end;
      writeln(' Правильных ответов:',kol); write(' Ваша оценка: ') ; case kol of
      10: writelnС51); 9,8: writeln('4'); 7,6: writeln('3') ; 0..5:writeln('2') ; end;
      writeln(' Для завершения работы с программой нажмите ') ;
      readln; end.
      
      Задача 128
      
      { Проверка умения складывать и вычитать числа. } uses
      Crt;
      var
      numbl,numb2:integer; { числа }
      op:integer; { Действие над числами 0 - сложение,
      1 - вычитание }
      sop: char; { знак операции - "плюс" или "минус" } res:integer; { Результат } otv:integer; { Ответ испытуемого } kol:integer; { Количество правильных ответов }
      buf:integer; { буфер для обмена numbl и numb2, в случае, если numbl  i: integer; { счетчик циклов }
      begin
      ClrScr;
      writeln('Проверка умения складывать и вычитать числа.');
      writeln('После примера введите ответ и нажмите .');
      106
      l:=0;
      Randomize;
      for i:=l to 10 do
      begin
      { сгенерируем пример }
      numbl:=Random(9)+1; { первое число }
      numb2:=Random(9)+1; { второе число }
      op:=Random(2); ( действие над числами }
      if op=0 then
      begin { сложение} res:=numbl+numb2; sop:='+'; end else
      begin { Вычитание }
      
      if numbl < numb2 then
      begin { обменяем numbl и numb2} buf:=numb2; numb2:=numbl; numbl:=buf; end;
      res: =numbl-numb2 ; end;
      write(' ',numbl,sop,numb2,'='); { вывести пример } readln(otv); { получить ответ
      испытуемого } if otv = res then
      kol:=kol+l else
      begin
      writeln(' Вы ошиблись! ',numbl,sop,numb2,'=',res);
      end; end;
      writeln(' Правильных ответов:',kol); write(' Ваша оценка:'); case kol of
      10: writeln(?5');
      9,8: writeln(l4l);
      7,6: writelrK'31) ; 0..5:writeln('2') ; end; writelnC Для завершения работы с программой нажмите
      '); readln; end.
      
      Задача 129
      
      { Простые электронные часы }
      uses Crt; { используем процедуры и функции библиотеки Crt }
      var
      min,sec: integer; { минуты, секунды } begin
      ClrScr; { очистить экран } for min:=l to 3 do begin
      for sec:=l to 60 do begin
      Delay(lOOO); { задержка 1000 ms }
      GotoXY(l,l); { установить курсор в 1-ю колонку
      1-й строки ) write(min,':',sec,' ');
      if KeyPressed ( если нажата клавиша } then Halt; { завершить программу } end; end; end.
      
      Задача 130
      
      { Вычисление среднего арифметического
      последовательности положительных чисел } var
      а : integer; { число, введенное с клавиатуры } n : integer; { количество чисел } s : integer; { сумма чисел } m : real; { среднее а=0;
      writeln('Вычисление среднего арифметического
      последовательности положительных чисел.');
      writeln('Вводите после стрелки числа. ',
      'Для завершения ввода введите ноль.');
      repeat
      write C> ');
      readln(a);
      s:=s+a;
      n:=n+l; until a <= 0; n:=n-l;
      writeln('Введено чисел:',n); writeln('Сумма чисел: ',s); m := s/n; writeln('Среднее арифметическое: ',m:6:2);
      writeln('Для завершения работы программы нажмите ');
      readln;
      end.
      
      Задача 131
      
      ( Определение максимального числа последовательности положительных чисел }
      var
      а : integer; { очередное число } m : integer; { максимальное число } begin
      write('Определение максимального числа');
      writeln('последовательности положительных чисел.');
      writeln('Вводите после стрелки числа. ',
      'Для завершения ввода введите ноль.'); т:=0; repeat
      write('> ');
      readln(a);
      if a > т then m := а; until a <= 0; writeln('Максимальное число: ',т);
      завершения работы программы нажмите ');
      readln;
      end.
      
      Задача 132
      
      { Проверка, является ли введенное с клавиатуры
      целое число простым } program prost; var
      n: integer; d: integer; r: integer; begin
      write('Введите целое число-> ');
      readln(n);
      d:=2; { сначала будем делить на два }
      repeat
      r:=n mod d;
      if r<>0 ( n не разделилось нацело на d }
      then d:=d + 1;
      until r=0; { пока не нашли число, на которое делится п ) if d=n
      then writelnf n,' - простое число. ') else writeln(n,' - не простое число.');
      
      Задача 134
      
      { Игра "Угадай число" } const
      NPOP=5; { количество попыток, предоставляемое игроку } var
      comp: integer; { число, "задуманное" компьютером }
      igrok: integer; { вариант игрока }
      n: integer; { кол-во попыток, сделанное игроком } begin
      Randomize; { инициализация генератора случайных чисел }
      comp:=Random(9)+1; { компьютер задумал число }
      110
      teln('Игра "Угадай число". ') ;
      writeln('Компьютер "задумал" число от 1 до 10.');
      writeln('Угадайте его за ',NPOP,' попыток.');
      writeln('Введите число и нажмите .');
      repeat
      n:=n+l;
      write('->');
      readln(igrok);
      until (n = NPOP) or (comp = igrok); if comp = igrok
      then writeln('Вы выиграли!')
      else writeln('Вы проиграли! Компьютер задумал число ',
      comp); readln;
      end.
      
      Задача 135
      
      { Таймер )
      uses Crt;
      var .
      mm, sec: integer; { задержка: минут и секунд } begin
      writeln('Введите величину задержки в минутах и секундах,');
      writeln('например 2 30 и нажмите .');
      write('->');
      readln(min,sec);
      ClrScr;
      GotoXY(2,2);
      write(min,':',sec,' ');
      repeat
      if sec = 0 then begin
      min:=min-l;
      sec:=60; end; repeat
      Delay(1000) ;
      sec:=sec-l;
      GotoXY(2,2) ; { задержка 1 сек } write(min,':',sec,' '); if KeyPressed { если нажата клавиша } then Halt; { завершить программу } until sec = 0; until (min = 0) and (sec = 0);
      { звуковой сигнал }
      Sound(1000); { включить звук - сигнал частотой 1000 герц} Delay(500);
      Nosound; { выключить звук} end.
      
      Задача 136
      
      { вычисляемое значение ПИ }
      { точность вычисления }
      { номер члена ряда }
      { значение члена ряда }
      { Вычисление числа "ПИ" var
      p:real;
      t:real;
      n:integer;
      elemrreal; begin
      p:=0;
      n:=l;
      elem:=l; { начальное значение}
      write('Задайте точность вычисления ПИ-> ');
      readln(t);
      writeln('Вычисление ПИ с точностью',t:9:6);
      while elem >= t do
      begin
      elem:=l/(2*n-l) ; if (n MOD 2) = 0
      then p:=p-elem else p:=p+elem; n:=n+l;
      end;
      p:=p*4;
      writeln('Значение ПИ с точностью',t:9:б,' равно1,р:9:6);
      writeln('Просуммировано ',п,' членов ряда.');
      readln; end.
      
      Задача 137
      
      { Вычисление наибольшего общего делителя двух целых чисел }
      var
      nl,n2:integer; { числа, НОД которых надо найти } nod:integer; { наибольший обший делитель } г:integer; { остаток от деления nl на п2 }
      begin
      writeln('Вычисление наибольшего общего делителя1);
      writeln('для двух целых чисел.');
      write('Введите в одной строке два числа ');
      writeln('и нажмите ');
      write('->');
      readln(nl,n2);
      while (nl mod n2)<>0 do
      begin
      r:=nl mod n2; { остаток от деления} nl:=n2; n2:=r;
      end;
      nod:=n2;
      writelnCНОД чисел ',nl,' и ',п2,' это ',nod); readln;
      
      Задача 138
      
      { Приветствие } var
      name: string[40]; { имя пользователя } begin
      writelnC Как Вас зовут?');
      writeln('(введите свое имя и нажмите ');
      write('->');
      readln(name);
      writeln('Здравствуйте, ',name,'!');
      readln; end.
      
      Задача 139
      
      { Посимвольный вывод сообщения ) uses
      Crt; { для доступа к процедуре Delay } var
      msg: string[80]; ( сообщение } n: integer; ( номер выводимого символа } begin
      msg:='Приветствую великого программиста! '; for n:=1 to Length(msg) do begin
      write(msg[n]);
      Delay(lOO); { задержка 0.1 сек } end; readln; end.
      
      Задача 140
      
      { Выводит код введенного символа } var
      sim: char; { символ } code: integer; ( код символа } begin
      writeln('Введите символ и нажмите .');
      writeln('Для завершения работы программы введите точку.');
      repeat
      write('->'); readln(sim) ; code:=Ord(sim) ;
      writeln('Символ: *,sim, ' Код: ',code); until sim = '.';
      end.
      
      Задача 141
      
      { Вывод таблицы кодировки символов } var
      ch:char; { символ }
      dec:integer; { десятичный код символа }
      i,j:integer;
      114
      in
      dec:=O;
      for i:=0 to 15 do ( шестнадцать строк } begin
      ' dec:=i; { чтобы получить таблицу кодировки} { для символов с кодами 128-255, } { эту инструкцию надо ) { заменить на dec:=i+128;} for j:=l to 8 do { восемь колонок } begin
      if(dec<7) or (dec>=14> then
      write(dec:4, '-', ' ',
      chr(dec):l,chr(179)) else { символы CR,LF,TAB не отображаются }
      write(dec:4,'- ',chr(179)); dec:=dec+16; and;
      writeln; { переход к новой строке экрана } end; readln; end.
      
      Задача 142
      
      var
      st: string[80]; { строка текста } len: integer; { длина строки } i: integer; { номер обрабатываемого символа ) begin
      writeln('Введите строку текста и нажмите '); write('->'); readln(st); len:=Length(st); for i:=l to len do
      case st[i] of
      •a'..'n': st[i]:=chr(ord(st[i])-32); 'р'-.'я1: st[i]:=chr(ord(st[i])-80);
      end;
      writeln('Строка, преобразованная к верхнему регистру: writeln(st); );
      readln; end.
      
      Задача 143
      
      { Удаление начальных пробелов строки } var
      st:string[80]; { строка } begin
      writeln('Удаление начальных пробелов строки.1);
      write('Введите строку:');
      readln(st);
      while (post1 ',st) = 1) and (length(st)>0) do delete(st,1/1);
      write('Строка без начальных пробелов:',st);
      readln; end.
      
      Задача 144
      
      ( Проверка, является ли введенная
      с клавиатуры строка целым числом } var
      st: string[40]; { строка }
      n: integer; { номер проверяемого символа } begin
      writeln('Введите число и нажмите ');
      write('->');
      readln(st);
      n:=l;
      while (n <= Length(St)) and
      ((st[n] >= '0') and (st[n] <-'9')) do n:=n+l;
      write('Введенная строка '); if n < Length(st)
      then write('не '); writeln('является целым числом. '); readln; end.
      
      Задача 146
      
      { проверяет, является ли введенная строка
      шестнаддатеричным числом } var
      st: string[20]; { строка }
      i: integer; { номер проверяемого символа }
      error: boolean; { в строке есть неверный символ } begin
      writeln('Введите шестнадцатеричное число и нажмите ');
      write('->');
      readln(st);
      { преобразуем введенную строку к верхнему регистру for i:=l to Length(st)
      do st[i]:=UpCase(st[i]);
      error:=FALSE;
      while (i <= Length(st)) and fnot error)
      do if ((st[i] >= '0') and (st[i] <= '9')) or
      ((st[i] >= 'A') and (st[i] <= 'F')) then i:=i+l else error:=TRUE;
      write('Строка '); if error
      then write('не ');
      writeln('является шестнадцатеричным числом. '); readln; end. { проверяет, является ли введенная строка дробным числом без знака }
      var
      st: string[20]; { строка }
      i: integer; { номер проверяемого символа }
      err: boolean; { TRUE - строка не дробное число }
      begin
      writeln('Введите дробное число и нажмите ');
      write('->');
      readln(st);
      i:=l;
      err:=TRUE; { пусть строка - не дробное число }
      if (st[i] >='l') and (st[i] <='9') then { первый символ
      цифра )
      begin
      { за цифрой возможно следут еще цифры } while (st[i] >='l') and (st[i] <='9') and (KLength(st) )
      do i:=i+l;
      { за цифрами следует точка, но она не последний символ } if ((st[i] = '.') and (i < Length(st))) then { точка } begin
      { за точкой должна быть хотя бы одна цифра } if ((st[i] >='l') and (st[i] <='9')) then begin
      while ((st[i] >='l') and (st[i] <='9') and (KLength(st) ) ) do i:=i+l;
      if i= Length(st) { последний символ - цифра} then err:=FALSE; { предположение
      об ошибке ложно } •nd; end; end;
      write('Строка '); if err
      then write('не ');
      writeln('является дробным числом.'); readln; end.
      
      Задача 148
      
      { Программа преобразует введенное с клавиатуры двоичное восьмиразрядное число в десятичное } var
      bin: string[8]; { изображение двоичного числа }
      : integer; { десятичное число }
      г: string[1]; { i-й разряд двоичного числа }
      v: integer; ( вес i-ro разряда двоичного числа }
      i: integer; { номер разряда двоичного числа }
      in
      writeln('Введите восьмиразрядное двоичное число');
      writeln('n нажмите .');
      write ('->');
      readln(bin);
      if Length(bin) <> 8 then
      writeln('Число должно быть восьмиразрядным.') else begin dec:=0;
      v:=128; {вес старшего (8-го) разряда двоичного числа } for i:=l to 8 do begin
      r:=bin[i]; { выделить i-й разряд } if г = 'I1 then
      dec:=dec+v; t
      v:=Round(v/2); { вычислить вес следующего разряда } end;
      write('Двоичному числу ',bin,'); writeln(' соответствует десятичное ',dec); end;
      writeln('Для завершения работы программы нажмите .');
      readln;
      
      Задача 149
      
      var
      st: string[2]; { шестнадцатеричное число }
      d: integer; { десятичное число, соответствующее
      введенному шестнадцатеричному }
      v: integer; { вес разряда шестнадцатеричного числа } 1: integer; begin
      writeln('Введите двухразрядное шестнадцатеричное число 'и нажмите .');
      write('->'); readln (st);
      { преобразуем введенную строку к верхнему регистру } for i:=l to Length(st)
      do st[i]:=UpCase(st[i]);
      i:=Length(st); { обрабатываем с младшего разряда } v:=l; {и его вес равен единице }
      while (i>0) and
      (((st[i] >= '0') and (st[i] <= '9')) or
      ((st[i] >= 'A') and (st[i] <= 'F'))) do begin
      { здесь символ - цифра или
      латинская буква от А до F) if (st[i] >= '0') and (st[i] <= '9') then d:=d + v * ( Ord(st[i])-48 )
      { Ord('O') = 48, Ord('l') = 49, и т.д. } else d:=d + v * (Ord(st[i]) - 55);
      { Ord('A') = 65, Ord('B') = 66, и т.д. }
      i:=i-l; { к предыдущему разряду } v:=v*16;
      end;
      if i=0 { обработаны все разряды }
      then writeln('Шестнадцатеричному числу ',st,
      ' соответствуе десятичное ',d) else writeln('Введенная строка не является ',
      'шеснадцатеричнои цифрой.');
      readln; end.
      
      Задача 150
      
      { Программа преобразует десятичное число
      в число в указанной пользователем системе счисления (от 2-х до 10-ти) )
      uses Crt;
      о:integer; n:integer; г:integer;
      s:string[16]
      { Основание системы счисления }
      { Исходное число }
      { Остаток от деления числа на основание
      сист. счисл. } { Представление числа в заданной
      сист. счисл. }
      buf:string[1]; begin
      ClrScr;
      write('Введите целое число -> '); readln(n);
      write('Введите основание системы счисления -> '); readln(o); s: = " ;
      { делим исходное число на основание системы счисления до тех пор, пока остаток от деления больше основания системы счисления. Остаток от деления на каждом шаге - очередная цифра. } repeat
      r:=n mod о; n:=n div о; Str(r,buf); s:=buf+s; until(n  ( очередная цифра } { целая часть деления } ( преобразование цифры в строку}
      ( Программа преобразует десятичное число
      в шестнадцатеричное } uses Crt;
      var
      n:integer; { Исходное число }
      r:integer; { Остаток от деления числа на основание сист. счисл. }
      s:string[16]; { Представление числа в заданной сист. счисл. }
      buf:string[1] ; begin
      ClrScr;
      write('Введите целое число -> ');
      readln(n);
      s: = " ;
      { делим исходное число на основание системы
      счисления (16) до тех пор, пока остаток от деления
      больше основания системы счисления.
      Остаток от деления на каждом шаге - очередная
      цифра. }
      write('Десятичному числу ' ,п) ; write (' соотвеств,ует шестнадцатеричное ') ; repeat
      r:=n mod 16; ( очередная цифра } n:=n div 16; { целая часть деления } if r<10
      then buf:=chr(r+48) { chr(48) = '0', chr(49)='l'
      и т.д. }
      else buf:=chr(r+55); { chr(65) = 'A', chr(66)='B'
      и т.д. } s:=buf+s; until(n<16) ; if n <> 0 then begin if n<10
      then buf:=chr(n+48) else buf:=chr(n+55); s:=buf+s; end;
      writeln(s); readln;
      end.
      { Программа вычисляет значение арифметического
      выражения, введенного с клавиатуры } uses Crt;
      s: string[80]; { сторока }
      1: integer; { длина строки }
      z: integer; { значение выражения }
      n: integer; { очередное число }
      i: integer; { номер числа в строке }
      err: integer; { код ошибки, при преобразовании символа в число }
      begin
      ClrScr;
      writeln('Введите арифметическое выражение,1);
      writeln('например, 4+5-3-5+2 и нажмите клавишу ');
      write('->');
      readln(s);
      val (s[1],z,err);
      i: =3 ;
      repeat
      val(s[i],n,err); { получить очередное однозначное
      число }
      if s[i-l] = '+' then z:=z+n else z:=z-n;
      until i > Length(s) ;
      writeln('Значение введенного выражения: *,z); writeln('Для завершения программы нажмите .'); readln; end.

    * * *

    round2-za_predelami_razuma

     
    Ваша оценка:
  • Прослушать:[mp3,1678k]
  • Жанр: Хип-хоп
  •   Процедуры и функции
      
      В языке Паскаль, как и в большинстве языков программирования, предусмотрены средства, позволяющие оформлять вспомогательный алгоритм как подпрограмму. Это бывает необходимо тогда, когда какой-либо подалгоритм неоднократно повторяется в программе или имеется возможность использовать некоторые фрагменты уже разработанных ранее алгоритмов. Кроме того, подпрограммы применяются для разбиения крупных программ на отдельные смысловые части в соответствии с модульным принципом в программировании.
      
      Для использования подалгоритма в качестве подпрограммы ему необходимо присвоить имя и описать алгоритм по правилам языка Паскаль. В дальнейшем, при необходимости вызвать его в программе, делают вызов подпрограммы упоминанием в нужном месте имени соответствующего подалгоритма со списком входных и выходных данных. Такое упоминание приводит к выполнению входящих в подпрограмму операторов, работающих с указанными данными. После выполнения подпрограммы работа продолжается с той команды, которая непосредственно следует за вызовом подпрограммы.
      
      В языке Паскаль имеется два вида подпрограмм - процедуры и функции.
      
      Процедуры и функции помещаются в раздел описаний программы. Для обмена информацией между процедурами и функциями и другими блоками программы существует механизм входных и выходных параметров. Входными параметрами называют величины, передающиеся из вызывающего блока в подпрограмму (исходные данные для подпрограммы), а выходными - передающиеся из подрограммы в вызывающий блок (результаты работы подпрограммы).
      
      Одна и та же подпрограмма может вызываться неоднократно, выполняя одни и те же действия с разными наборами входных данных. Параметры, использующиеся при записи текста подпрограммы в разделе описаний, называют формальными, а те, что используются при ее вызове - фактическими.
      
      
      
      Описание и вызов процедур и функций
      Структура описания процедур и функций до некоторой степени похожа на структуру Паскаль-программы: у них также имеются заголовок, раздел описаний и исполняемая часть. Раздел описаний содержит те же подразделы, что и раздел описаний программы: описания констант, типов, меток, процедур, функций, перменных. Исполняемая часть содержит собственно операторы процедур.
      
      Формат описания процедуры имеет вид:
      
      procedure имя процедуры (формальные параметры);
       раздел описаний процедуры
      begin
      
       исполняемая часть процедуры
      
      end;
      
      Формат описания функции:
      
      function имя функции (формальные параметры):тип результата;
       раздел описаний функции
      begin
      
       исполняемая часть функции
      
      end;
      
      Формальные параметры в заголовке процедур и функций записываются в виде:
      
      var имя праметра: имя типа
      и отделяются друг от друга точкой с запятой. Ключевое слово var может отсутствовать (об этом далее). Если параметры однотипны, то их имена можно перечислять через запятую, указывая общее для них имя типа. При описании параметров можно использовать только стандартные имена типов, либо имена типов, определенные с помощью команды type.Список формальных параметров может отсутствовать.
      
      Вызов процедуры производится оператором, имеющим следующий формат:
      
      имя процедуры(список фактических параметров);
      Список фактических параметров - это их перечисление через запятую. При вызове фактические параметры как бы подставляются вместо формальных, стоящих на тех же местах в заголовке. Таким образом происходит передача входных параметров, затем выполняются операторы исполняемой части процедуры, после чего происходит возврат в вызывающий блок. Передача выходных параметров происходит непосредственно во время работы исполняемой части.
      
      Вызов функции в Турбо Паскаль может производиться аналогичным способом, кроме того имеется возможность осуществить вызов внутри какого-либо выражения. В частности имя функции может стоять в правой части оператора присваивания, в разделе условий оператора if и т.д.
      
      Для передачи в вызывающий блок выходного значения функции в исполняемой части функции перед возвратом в вызывающий блок необходимо поместить следующую команду:
      
      имя функции := результат;
      При вызове процедур и функций необходимо соблюдать следущие правила:
      
      количество фактических параметров должно совпадать с количеством формальных;
      соответствующие фактические и формальные параметры должны совпадать по порядку следования и по типу.
      Заметим, что имена формальных и фактических параметров могут совпадать. Это не приводит к проблемам, так как соответствующие им переменные все равно будут различны из-за того, что хранятся в разных областях памяти. Кроме того, все формальные параметры являются временными переменными - они создаются в момент вызова подпрограммы и уничтожаются в момент выхода из нее.
      
      Рассмотрим использование процедуры на примере программы поиска максимума из двух целых чисел.
      
      var x,y,m,n: integer;
      
      procedure MaxNumber(a,b: integer; var max: integer);
      begin
       if a>b then max:=a else max:=b;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       MaxNumber(x,y,m);
       MaxNumber(2,x+y,n);
       writeln('m=',m,'n=',n);
      end.
      
      Аналогичную задачу, но уже с использованием функций, можно решить так:
      
      var x,y,m,n: integer;
      
      function MaxNumber(a,b: integer): integer;
       var max: integer;
      begin
       if a>b then max:=a else max:=b;
       MaxNumber := max;
      end;
      
      begin
       write('Введите x,y ');
       readln(x,y);
       m := MaxNumber(x,y);
       n := MaxNumber(2,x+y);
       writeln('m=',m,'n=',n);
      end.
      
      
      Передача параметров
      
      
      В стандарте языка Паскаль передача параметров может производиться двумя способами - по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке - параметрами-переменными. Последние отличаются тем, что в заголовке процедуры (функции) перед ними ставится служебное слово var.
      
      При первом способе (передача по значению) значения фактических параметров копируются в соответствующие формальные параметры. При изменении этих значений в ходе выполнения процедуры (функции) исходные данные (фактические параметры) измениться не могут. Поэтому таким способом передают данные только из вызывающего блока в подпрограмму (т.е. входные параметры). При этом в качестве фактических параметров можно использовать и константы, и переменные, и выражения.
      
      При втором способе (передача по ссылке) все изменения, происходящие в теле процедуры (функции) с формальными параметрами, приводят к немедленным аналогичным изменениям соответствующих им фактических параметров. Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
      
      Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные - по ссылке. Практически это сводится к расстановке в заголовке процедуры (функции) описателя var при всех параметрах, которые обозначают результат работы подпрограммы. Однако, в связи с тем, что функция возвращает только один результат, в ее заголовке использовать параметры-переменные не рекомендуется.
      
      
      
      Локальные и глобальные идентификаторы
      Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В часности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.
      
      Имена, описанные в заголовке или разделе описаний процедуры или функции называют локальными для этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Следует помнить, что формальные параметры прцедур и функций всегда являются локальными переменными для соответствующих блоков.
      
      Основные правила работы с глобальными и локальными именами можно сформулировать так:
      
      Локальные имена доступны (считаются известными, "видимыми") только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называют областью видимости для этих локальных имен.
      Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.
      Глобальные имена хранятся в области памяти, называемой сегментом данных (статическим сегментом) программы. Они создаются на этапе компиляции и действительны на все время работы программы.
      
      В отличие от них, локальные переменные хранятся в специальной области памяти, которая называется стек. Они являются временными, так как создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
      
      Имя, описанное в блоке, "закрывает" совпадающие с ним имена из блоков, содержащие данный. Это означает, что если в двух блоках, один из которых содержится внутри другого, есть переменные с одинаковыми именами, то после входа во вложенный блок работа будет идти с локальной для данного блока переменной. Пременная с тем же имнем, описанная в объемлющем блоке, становится временно недоступной и это продолжается до момента выхода из вложенного блока.
      
      Рекомендуется все имена, которые имеют в подпрограммах чисто внутреннее, вспомогательное назначение, делать локальными. Это предохраняет от изменений глобальные объекты с такими же именами.
      

    * * *

    round2_chto-ti-skazhesh

     
    Ваша оценка:
  • Прослушать:[mp3,1624k]
  • Жанр: Хип-хоп
  • Кёртиса, высекаю как сено у сенокоса,
    Косвенно, ты дошёл до стадии износа мозга,
    Кончатся, в его словаре слова и что он мне
    на это скажет, если секатор у меня в руке.  
                  у перекрёстка баттла раундов.
    
    в его текстах пафос аж из жопы капает,
    ...зазнался и считает себя намба уан,
    посад на ёлку лечит звёздную болезнь
    изувечив...намечен план тебя в утиль слить пацан,
    или мацан ты? но я не знаком с тобой,
    и судя по трэку, очередной понторез пустой,
    Это фэйсу фаллосом дыиженья, а не дисс,
    Ты не король, а шут у пьедестала павший ниц,
    обещал я буду равать аналы опонентам,
    готовь промежность и сбрей волос нарост,
    А кто лучше из нас гадай на кофейной гуще,
    я настоящий и считаю это преимуществом,
    в отличье от твоей слащавости уролог будущий,
    Я очень мощный, а твой шлягер это ваще шляпа,
    Но преподносишь как брилианты на аукцион,
    и кто пустил дебила к микрофону кто мне скажет?
    и кто пустил дебила к микрофону кто мне скажет?
    
    Мараться об засранца  мне приходится до конца,
    и моя цель его лицо отправить к праотцам.
  • Комментарии: 1, последний от 23/03/2009.
  • © Copyright Romich (...)
  • Обновлено: 03/02/2007. 0k. Статистика.
  • Хип-хоп

  • Связаться с программистом сайта

    Сайт "Художники"
    Доска об'явлений для музыкантов