Алгоритмические языки низкого и высокого уровня. Сравнительные характеристики, назначение и возможности современных языков программирования Прочие языки программирования

Жаропонижающие средства для детей назначаются педиатром. Но бывают ситуации неотложной помощи при лихорадке, когда ребенку нужно дать лекарство немедленно. Тогда родители берут на себя ответственность и применяют жаропонижающие препараты. Что разрешено давать детям грудного возраста? Чем можно сбить температуру у детей постарше? Какие лекарства самые безопасные?

Классификация языков программирования.

Существуют различные классификации языков программирования.

По наиболее распространенной классификации все языки программирования, в соответствии с тем, в каких терминах необходимо описать задачу, делят на языки низкого и высокого уровня .

Если язык близок к естественному языку программирования, то он называется языком высокого уровня, если ближе к машинным командам, – языком низкого уровня.

В группу языков низкого уровня входят машинные языки и языки символического кодирования: Автокод, Ассемблер. Операторы этого языка – это те же машинные команды, но записанные мнемоническими кодами, а в качестве операндов используются не конкретные адреса, а символические имена. Все языки низкого уровня ориентированы на определенный тип компьютера, т. е. являются машинно–зависимыми.

Машинно–ориентированные языки – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.).

К языкам программирования высокого уровня относят Фортран (переводчик формул – был разработан в середине 50–х годов программистами фирмы IBM и в основном используется для программ, выполняющих естественно – научные и математические расчеты), Алгол , Кобол (коммерческий язык – используется, в первую очередь, для программирования экономических задач), Паскаль , Бейсик (был разработан профессорами Дармутского колледжа Джоном Кемени и Томасом Курцом.), Си (Деннис Ритч – 1972 году), Пролог (в основе языка лежит аппарат математической логики) и т.д.

Эти языки машинно–независимы , т.к. они ориентированы не на систему команд той или иной ЭВМ, а на систему операндов, характерных для записи определенного класса алгоритмов. Однако программы, написанные на языках высокого уровня, занимают больше памяти и медленнее выполняются, чем программы на машинных языках.

Программу, написанную на языке программирования высокого уровня, ЭВМ не понимает, поскольку ей доступен только машинный язык. Поэтому для перевода программы с языка программирования на язык машинных кодов используют специальные программы – трансляторы.

Существует три вида транслятора: интерпретаторы (это транслятор, который производит пооператорную обработку и выполнение исходного кода программы), компиляторы (преобразует всю программу в модуль на машинном языке, после чего программа записывается в память компьютера и лишь потом исполняется) иассемблеры (переводят программу, записанную на языке ассемблера, в программу на машинном языке).

Языки программирования также можно разделять на поколения:


языки первого поколения : машинно–ориентированные с ручным управлением памяти на компьютерах первого поколения.

языки второго поколения : с мнемоническим представлением команд, так называемые автокоды.

языки третьего поколения : общего назначения, используемые для создания прикладных программ любого типа. Например, Бейсик, Кобол, Си и Паскаль.

языки четвертого поколения : усовершенствованные, разработанные для создания специальных прикладных программ, для управления базами данных.

языки программирования пятого поколения : языки декларативные, объектно–ориентированные и визуальные. Например, Пролог, ЛИСП (используется для построения программ с использованием методов искусственного интеллекта), Си++, Visual Basic, Delphi.

Языки программирования также можно классифицировать на процедурные и непроцедурные.

В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий.

Среди процедурных языков выделяют в свою очередь структурные и операционные языки . В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных известны Фортран, Бейсик, Фокал.

Непроцедурное (декларативное) программирование появилось в начале 70-х годов 20 века, К непроцедурному программированию относятся функциональные и логические языки .

В функциональных языках программа описывает вычисление некоторой функции. Обычно эта функция задается как композиция других, более простых, те в свою очередь делятся на еще более простые задачи и т.д. Один из основных элементов функциональных языков – рекурсия. Оператора присваивания и циклов в классических функциональных языках нет.

В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается Пролог. Программа на Прологе содержит, набор предикатов–утверждений, которые образуют проблемно–ориентированную базу данных и правила, имеющие вид условий.

Можно выделить еще один класс языков программирования – объектно–ориентированные языки высокого уровня. На таких языках не описывают подробной последовательности действий для решения задачи, хотя они содержат элементы процедурного программирования. Объектно–ориентированные языки, благодаря богатому пользовательскому интерфейсу, предлагают человеку решить задачу в удобной для него форме.

Первый объектно-ориентированный язык программирования Simula был создан в 1960-х годах Нигаардом и Далом.

Ява – язык для программирования Internet, позволяющий создавать безопасные, переносимые, надежные, объектно–ориентированные интерактивные программы. Язык Ява жестко связан с Internet, потому, что первой серьезной программой, написанной на этом языке, был браузер Всемирной паутины.

В последнее время, говоря о программировании в Internet, часто имеют в виду создание публикаций с использованием языка разметки гипертекстовых документов HTML . Применение специальных средств (HTML–редакторов) позволяет не только создавать отдельные динамически изменяющиеся интерактивные HTML–документы, используя при этом данные мультимедиа, но и редактировать целые сайты.

Введение

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

· постановка задачи;

· сбор данных, необходимых для решения задачи;

· реализация алгоритма обработки данных;

· трансляция алгоритма в структуру, способную решить поставленный алгоритм - программу или пакет программ;

· тестирование и отладка программы или пакета программ;

· применение программы или пакета программ к поставленной задаче;

· анализ полученных результатов.

Для создания программы, способной решать поставленные задачи, используются различные языки программирования. На данный момент в мире существует большое количество языков программирования разных уровней, отличающихся друг от друга не только по синтаксису, но и по структуре работы с данными. В качестве объекта исследования для получения информации о возможностях функционально - ориентированных языков программирования высокого уровня будут рассматриваться два характерных представителя языков этого класса - Паскаль и Си. В сравнительном анализе этих двух языков необходимо будет определить характерные особенности в их структуре и выделить из них наиболее удобный в плане реализации поставленных задач.

Сравнительный анализ языков программирования высокого уровня Си и Паскаль

Язык высокого уровня - тип языка компьютерного программирования. Языки высокого уровня предназначены для выражения потребностей программиста, а не возможностей компьютера. Они используют абстрактные данные и контролируют структуры, символические обозначения и переменные. Существует много языков высокого уровня, в том числе Бейсик (BASIC), Кобол (COBOL), Паскаль (Pascal), Фортран (FORTRAN), Алгол (Algol) и Си (C). Чтобы можно было использовать программы, написанные на языках высокого уровня, их нужно перевести в машинные коды. Рассмотрим в противопоставлении языки высокого уровня Си и Паскаль.

Структура программы

Для определения множеств имен переменных используется понятие идентификатора . Идентификаторами в Паскале является произвольный набор символов. Требования к идентификаторам:

· идентификатор состоит из латинских букв и цифр (заглавные и строчные буквы не различаются);

· идентификатора должен начинаться обязательно с буквы ("а1", а не "1а");

· идентификатор может состоять из любого количества символов, но распознаются только первые 63;

· служебные слова запрещается использовать в качестве идентификаторов.

Программа составляется из операторов Паскаля, которые разделяются символом ";". Для выделения группы операторов используют операторные скобки: begin…..end. Несколько операторов, заключенных в операторные скобки, называют составным оператором. В тексте программы фигурными скобками выделяются комментарии, которые игнорируются при выполнении программы. В тексте лекций будем также использовать фигурные скобки для комментирования.

Структура программы на языке Турбо Паскаль:

· заголовок, название программы;

· подключение внешних модулей;

· описание констант;

· задание типов;

· раздел объявления переменных;

· описание функций;

· описание процедур;

· начало основной программы;

· тело основной программы;

· конец основной программы.

Переменные, объявленные внутри основного блока программы, помещаются в сегмент данных и инициализируются нулем компилятором; переменные, объявленные внутри подпрограмм, объявляются внутри сегмента стека и не инициализируются. Все тело программы представляет собой жесткую конструкцию, в которую нельзя вносить никаких изменений без потери работоспособности проекта.

Структура Си-программ . Идентификатором в языке Си называется последовательность цифр, букв и специальных символов. При этом первой стоит буква или специальный символ. Для получения идентификаторов можно использовать строчные или прописные буквы латинского алфавита. Специальным символом может служить символ подчеркивания «_».

Два идентификатора, для получения которых применяются совпадающие строчные и прописные буквы, считают различными. К примеру: abc, ABC, A328B, a328b. Компилятор допускает всякое количество символов в идентификаторе, но значим только первый 31 символ.

Идентификатор образуется на этапе объявления переменной, функции, структуры и т. п. После этого его можно применять в последующих операторах разрабатываемой программы. Важно отметить некоторые особенности при выборе идентификатора. Во-первых, идентификатор и ключевое слово не должны совпадать. Также не должно быть совпадения с зарезервированными словами и названиями функций библиотеки компилятора языка СИ.

Во-вторых, важно обратить особое внимание на применение символа подчеркивания «_» первым символом идентификатора, так как идентификаторы выстраиваются так, что, с одной стороны, могут совпадать с именами системных функций и «или» переменных, но при этом при применении таких идентификаторов программы могут стать непереносимыми, т. е. их нельзя применять на компьютерах других типов.

В-третьих, на идентификаторы, применяемые для определения внешних переменных, должны быть наложены ограничения, которые формируются используемым редактором связей. Кроме того, использование различных версий редактора связей или различных редакторов определяет различные требования на имена внешних переменных.

Ключевыми словами называются зарезервированные идентификаторы, наделенные определенным смыслом. Их можно применять только в соответствии со значением, известным компилятору языка СИ. Приведемсписокключевыхслов: auto double intstruct break else long switch register tupedef char extern return void case float unsigned default for signed union do if sizeof volatile continue enum short while. При этом в определенных версиях реализации языка СИ зарезервированными словами являются следующие: _asm, fortran, near, far, cdecl, huge, pascal, interrupt. Ключевые слова far, huge, near дают возможность определить размеры указателей на области памяти.

Ключевые слова _asm, cdecl, fortran, pascal используются для организации связи с функциями, которые написаны на других языках, а также для применения команд языка ассемблера непосредственно в теле будущей программы на языке СИ. Ключевые слова не могут применяться в качестве идентификаторов.

Любой язык программирования изобилует разнообразными ключевыми словами, функциями или классами. Как правило, все они используют английский язык, на котором описываются методы или аргументы. В некоторых средах и вовсе встречаются просто сокращения машинных функций. Это в значительной степени затрудняло освоение разработки на начальных этапах. С целью повысить скорость понимания была создана серия специальных алгоритмических языков программирования, которые состояли из понятных и доступных слов и их сочетаний, ясных даже неподготовленному человеку.

Немного истории

Для общения с первыми компьютерами использовались языки программирования, максимально приближенные к машинному коду, состоящему из нулей и единиц. Естественно, что запомнить множество команд было очень сложной задачей. К тому же методика распределения памяти при программировании полностью возлагалась на плечи разработчика. А если он допускал небольшую ошибку, то приходилось все переделывать сначала.

Большую роль в переходе от машинного языка к более подходящему человеку сыграл язык программирования низкого уровня ассемблер. В нем использовались мнемонические значения и символы. Это упростило задачу разработчика, так как теперь из комбинаций управляющих инструкций и числовых кодов он мог более продуктивно выстраивать свои алгоритмы. Несмотря на всю свою гибкость и мощность, язык все также был сложен в освоении.

Для обучения разработке и алгоритмам в учебных заведениях началось внедрение языка программирования бейсик. Он уже содержал в себе много команд, ключевых слов, понятных обучаемому. Бейсик до сих пор используется для освоения азов программирования.

С созданием первого алгоритмического языка программирования — алгола - дело освоения алгоритмов значительно ускорилось.

Что представляет собой алгоритм

Если уйти от сухой теории и определений, то алгоритм — это последовательность действий, направленных на решение поставленной задачи. Несмотря на всю витиеватость выражения, с этим понятием человек сталкивается повседневно. Например, чтобы попить чай, нужно выполнить следующую последовательность:

  1. Поставить чайник на плиту.
  2. Дождаться его закипания.
  3. Налить кипяток в воду.
  4. Опустить чайный пакет в чашку.
  5. Добавить необходимое количество сахара, молока или мёда.

Данная последовательность весьма упрощена, однако представляет собой самый простой алгоритм.

Так же, как и человек, вычислительная машина способна выполнять определённую последовательность задач. Однако, для того чтобы она их чётко понимала, нужно учитывать, что для ЭВМ отсутствует множество очевидных для людей понятий. К тому же алгоритм должен точно описывать все необходимые действия. Для этой цели и служит алгоритмический язык, который создаёт некий мост между машиной и человеком.

Свойства и особенности алгоритмического языка

Алгоритмический — формальный язык, на котором описываются алгоритмы, предполагаемые для выполнения на вычислительных машинах. Как правило, он не привязан к какой-либо архитектуре машины. Это помогает значительно повысить и ускорить написание кода. Как яркий пример - алгоритмический язык бейсик. Паскаль и си также оказались популярными, так как обладали простым синтаксисом и скоростью изучения.

Структура реализована таким образом, что процедуры, описанные в коде, выполняются одна за другой. То есть один алгоритм — одна задача. Это похоже на создание функций или методов в языках С и Java.

Весь код строится из ключевых слов, описывающих событие или переменную.

Различия между машинными и алгоритмическими языками

Ярким представителем машинно-зависимого языка является ассемблер. Программирование на нем сводится к тому, чтобы указать транслятору особыми метками, что и куда нужно переместить или какую область данных заполнить. Так как синтаксис ассемблера больше похож на машинный, то изучать и писать на нем код довольно затруднительно. Ниже вы видите, как могут выглядеть команды для разных процессоров.

Поэтому формальный язык или алгоритмический был создан с большим количеством понятных человеку ключевых слов и имён.

Ключевые слова

Алгоритмический язык состоит из ключевых слов, которые представляют собой сокращения полного обозначения действий или переменных. Это позволяет сократить длину кода, оставляя его при этом понятным.

  • Алг . С этого ключевого слова начинается любой алгоритм. В нем описывается название и в скобках указывается, какие аргументы он принимает для вычисления, и что должно получиться в результате.
  • Арг . Обозначает аргументы алгоритма. Отражает тип и название значения, которое будет использован в коде.
  • Рез . Данное ключевое слово служит для обозначения типа и имени переменной, в которую будет необходимо поместить результат вычисления.
  • Нач. Означает непосредственное начало выполнения алгоритма. Длится до ключевого слова кон. Весь промежуток от "нач" до "кон" называется телом текущего алгоритма.
  • Кон. Сообщает о том, что выполнение алгоритма окончено.
  • Дано . Говорит о некоторых особенностях и нюансах использования алгоритма или об ограничениях. Например, здесь можно указать, что длины сравниваемых строк должны быть одинаковыми. Использование ключевого слова "дано" необязательно.
  • Надо . Более подробное описание того, что должно получиться в результате выполнения алгоритма. Так же, как и "дано", может опускаться, но для построения более понятного и подробного кода его использование рекомендуется.

Список данных ключевых слов относится к заголовку и обозначению тела алгоритма. А вот так выглядят лексемы для переменных:

  • Цел . Тип переменной целых чисел. Диапазон их должен варьироваться от -32768 до 32767.
  • Вещ . Вещественные числа. Например, с экспонентой или дробной частью.
  • Лог . Это ключевое слово означает, что будет использована переменная логического типа, способная принимать только "да" или "нет".
  • Сим. Сюда входят значения с одиночными символами, например, «а», «3».
  • Лит . Строковые переменные, которые могут содержать целые текстовые строки.
  • Таб . Обозначает таблицу с данными определённого типа. Представляет собой аналог массива из других языков программирования.

Дополнительные служебные слова

Следующий список слов используется для организации механизмов ветвления и циклов.

  • Для . Применяется для перебора всех значений определённого диапазона. Используется для циклов, т. е. непрерывного выполнения каких-либо процедур с данными.
  • От и до . Указывает, какой именно диапазон значений нужно перебрать в цикле типа "для".
  • Пока . Также служит для перебора нескольких значений. Используется для работы до тех пор, пока не выполнится определённое условие.
  • Нц и кц . "Нц" в алгоритмическом языке означает начало тела цикла, а "кц" - конец. Между этими двумя ключевыми словами встраиваются необходимые для вычисления процедуры.
  • Если. С помощью этого слова реализуется структура ветвления. Таким образом можно определить ход программы в нужном направлении, учитывая условия.
  • То, иначе . Два слова, работающих в паре с "если". Также выстраивают механизм ветвления.
  • Выбор . Удобный инструмент для осуществления ветвления из нескольких значений одного типа. Работает в паре с ключевым словом "при" и "иначе".
  • Все . Означает окончание механизма ветвления.
  • Ввод . Данное ключевое слово позволяет пользователю вводить значения переменных в ходе работы программы для их последующей обработки.
  • Вывод. Производит вывод данных на экран.

Основные структуры языка

Алгоритмический язык программирования помогает выстраивать различные структуры, которые производят вычислительные функции в удобной форме. В общем, любой язык может использовать несколько определённых механизмов и их сочетания.

Структура следования

При проектировании такого вида структуры выполнение кода происходит непосредственно строка за строкой. Общий пример можно выразить таким образом:

алг Сумма двух чисел (арг цел a, b, рез цел S)

вывод «S = », S

В данном примере происходит вычисление суммы двух чисел, введённых пользователем. В начале слово "алг" показывает, что алгоритм начинается, и кратко описывает, что именно он делает. В скобках определяются аргументы, необходимые для работы программы, и переменная, которая послужит контейнером для хранения результатов. Далее идёт ключевое слово "нач", показывающее непосредственное начало выполнения выражений и процедур. Рядом с "нач" можно определить и некоторые промежуточные переменные.

В теле алгоритма ключевое слово "ввод" принимает от пользователя данные и записывает их в переменные. Затем они складываются, и их сумма присваивается S. Перед концом алгоритма результат работы программы выводится на экран посредством ключевого слова "вывод". Данная запись на алгоритмическом языке типична и для многих других сред программирования.

Структура ветвления

Ход программы не всегда должен выполняться строка за строкой. Иногда нужно определить или изменить значение некой переменной в зависимости от ситуации. Например, при условии, что х = 0, не осуществлять деление на х.

Алгоритмический язык программирования для этого использует несколько вариантов конструкций и ключевые слова "если", "то", "иначе" или "выбор". После "если" устанавливается условие, по которому будет определяться критерий перехода в другую ветвь. Например, так:

Таким образом можно менять значения переменных в зависимости от других факторов. Данный пример не полностью охватывает все возможные реализации. Поэтому дополнительно к конструкции применяется ключевое слово "иначе". Оно позволяет перейти в другую ветвь, если условие не соответствует выбранным критериям.

иначе у = 0

То есть в случае, когда х будет не равен нулю, у также обнулится вне зависимости от значения, которое он имел до этого.

Более удобным средством для осуществления множественного выбора является конструкция "выбор". Она позволяет перебрать несколько условий. При срабатывании одного из них будет выполнено указанное для него действие.

при х = 0: у = 0

при х = 1: у = 1

при х = 2: у = 2

Данный пример демонстрирует зависимость переменной у от х. Программа пробегает по всем данным и сравнивает текущее значение х с указанным в условии. При нахождении соответствия выполняет следующее за ним действие. Эту конструкцию можно также комбинировать с ключевым словом "иначе" для более гибких решений, когда ни одно из условий не отработало.

Циклы

Циклы играют очень важную роль в программировании. Практически ни одна разработка не сможет обойтись без реализации этой конструкции. В общем случае циклы решают задачу выполнения однотипных действий с несколькими переменными многократно. Это удобно, например, при заполнении массивов данными по известной формуле, его сортировки или же подсчёта некоторых значений.

Ключевое слово "пока" позволяет организовать цикл, в котором определённое действие будет повторяться до тех пор, пока не удовлетворится некое условие. Например:

нц пока х <= 3

В данном примере у будет увеличиваться до тех пор, пока х не станет больше 3. Для того чтобы цикл не был бесконечным, х нужно в каждом проходе изменить в большую сторону, например на 1, что и делает вторая строка кода.

Ключевое слово "для" применяется к некоторому диапазону чисел, который нужно перебрать последовательно, выполняя с ними какие-либо действия. Данная конструкция используется, когда конечное число элементов известно.

Синтаксис его выглядит так:

нц для х от 1 до 3

Служебные слова "от" и "до" показывают диапазон значений, которые необходимо перебрать. Таким образом в первой итерации х = 1, в результате прохода у приобретёт также значение 1. Дальше управление опять перейдёт в начало, и х теперь будет равен 2, соответственно, у станет 3.

Используя совместные конструкции циклов и ветвления, можно выстраивать простейшие алгоритмы для решения лёгких задач и получения знаний о работе языков программирования.

Стандартные функции

Алгоритмический язык обладает стандартными функциями, которые уже в него встроены. Они способны облегчить некоторые рутинные операции с числами и выражениями. Штатные функции алгоритмического языка могут производить вычисление квадратного корня, логарифмы, модули, синусы, косинусы и т. д:

  • абсолютный модуль — abs(x);
  • корень квадратный — sqrt(x);
  • натуральный и десятичный логарифмы — ln(x) и lg(x);
  • минимум и максимум двух чисел — min(x,y), max (x,y);
  • синус, косинус, тангенс, котангенс — sin(x), cos(x), tg(x), ctg(x).

Данные стандартные возможности позволяют избежать создания «велосипеда», помогая реализовать простейшие функции штатными средствами.

Логические выражения

Логические выражения отражают, удовлетворяет ли некая операция условию. Например, х > 0 будет иметь значение "истина" при х, равном 1, 2, 25 или любом другом числе больше нуля. Алгоритмический язык содержит логические выражения, которые помимо стандартных математических операций могут использовать следующие ключевые слова и операторы:

  • И. Означает, что выражения, между которыми находится ключевое слово, должны удовлетворять определённому условию: (х>0) и (у>0);
  • Или . Одно из выражений может не удовлетворять условию, например, (х>0) или (у>0);
  • Не . «Переворачивает» логическое значение выражения. Например, такая конструкция не (х>0), означает, что х все же должен быть не больше нуля.

Также присутствуют операторы сравнения - <, >, =, которые могут сочетаться, создавая выражения типа больше или равно.

Небольшая программа для алгоритмического языка

Для понимания процесса можно организовать программу, взаимодействующую с пользователем. Она будет запрашивать число, а машина - возводить его в квадрат.

Составляющие алгоритмического языка имеют в своем составе множество ключевых слов. Первое, с чего начинается программа, это объявление об алгоритме — алг.

алг Возведение числа в квадрат ()

В скобках нужно указать аргумент, который будет представлять собой значение от пользователя и результат. Также не стоит забывать про объявление типов этих данных.

Теперь машина будет знать, что взаимодействовать ей придется с переменной типа целое число, а результатом ее работы будет S.

Первое, что нужно сделать, осуществить ввод данных. Это производится с помощью ключевого слова "ввод".

Теперь непосредственно в теле алгоритма нужно описать ряд команд, с помощью которых будет реализовываться подсчёт квадратов чисел.

вывод «S = », S

Алгоритмический язык, команды которого позволяют реализовать присвоение, записываются в виде:=. Тем самым в переменную S попадает значение произведения х на самого себя. Строка с выводом показывает результат на экране. Ну и завершается все это ключевым словом "кон". Полный код теперь будет выглядеть так:

алг Возведение числа в квадрат (арг цел х, рез цел S)

вывод «S = », S

Вот таким простым образом реализуется алгоритм подсчёта квадрата введённого числа. Программу можно усложнить, добавив к ней сумму всех операций. И тогда она будет выглядеть так:

алг Возведение числа в квадрат и расчёт их суммы (арг цел х, рез цел S)

дано | х > 0

надо | S = 1*1 + 2*2+ … + x*x

нач цел а

ввод х; S:=0

нц для а от 1 до х

вывод «S = », S

В этом варианте используется цикл, промежуточная переменная а и краткое указание к задаче в разделах "дано" и "надо". Теперь, если передать программе некое число, она возведёт его в квадрат и выведет сумму квадратов всех чисел, ему предшествующих.

Использование и развитие алгоритмических языков

Алгоритмический язык распространён в среде обучения для понимания базовых норм и правил программирования. Например, бейсик, который проходят во многих школах. Он отлично отражает все парадигмы такого термина, как императивный язык программирования, в котором все команды выполняются последовательно одна за другой.

Из-за приближённости описываемых конструкций и ключевых слов к человеческому языку писать код стало гораздо проще, нежели на полностью машинных или машинно-зависимых моделях. Семейство языков программирования алгол зашло в своем развитии дальше всех, так как его синтаксис был представлен в нескольких локализациях. Писать код можно было даже на русском языке.

В общем, развитие алгоритмических языков сильно повлияло на программирование в целом и позволило большому количеству человек стать разработчиками. Современные средства становятся все более доступны и понятны. Языки программирования высокого уровня содержат все больше функций с говорящими именами и названиями. Пределов их использованию становится все меньше. Таким образом, в будущем возможна более понятная и естественная реализация разработки.

Информатика, кибернетика и программирование

Различают два уровня машинноориентированных языков: символического кодирования ассемблеры и макроязыки макроассемблеры. Это требование значительно уменьшается при использовании машиннонезависимых языков. Структура этих языков ближе к структуре естественных языков например к структуре английского языка чем к структуре машиноориентированных языков.

15 Классификация алгоритмических языков

В настоящее время создано несколько сот различных алгоритмических языков, которые обычно классифицируют по степени их зависимости от типа машин и типа решаемых задач.

По первому признаку они делятся на две большие группы: машиннозависимые и машиннонезависимые языки. Машиннозависимые языки классифицируют на машинные и машинноориентированные (автокоды). Различают два уровня машинноориентированных языков: символического кодирования (ассемблеры) и макроязыки (макроассемблеры).

В мнемокоде цифровой код операции заменен буквенным (мнемоническим), а цифровые адреса – буквенными именами.

В макроязыках, кроме кодов мнемоязыка, используются макрокоманды, которые не имеют в машинном языке непосредственных аналогов (они включают в себя несколько команд). Сокращая длину исходной программы, макроязыки позволяют несколько повысить производительность программистов.

Программист, работающий с машиннозависимыми языками, должен хорошо знать конструктивные особенности ЭВМ, для которой он составляет программу. Это требование значительно уменьшается при использовании машиннонезависимых языков.

Программы, записанные на машинонезависимых языках, почти не зависят от типа ЭВМ. Структура этих языков ближе к структуре естественных языков, например к структуре английского языка, чем к структуре машиноориентированных языков. Поэтому эти языки могут применять непрофессиональные программисты.

Машиннонезависимые языки в последние годы обычно разделяют на две группы. К первой, наиболее обширной группе, принадлежат процедурноориентированные языки. Ко второй, наименее разработанной группе, относятся проблемноориентированные языки.

Процедурноориентированные языки служат для описания готовых алгоритмов (процедур) решения задач. Их используют специалисты, хорошо знающие формулировки своих задач и методы их решения, но не владеющие тонкостями программирования.

Проблемноориентированные языки рассчитаны на пользователей, которые не знакомы с методами решения своих задач. В этом случае пользователь должен сформулировать задачу, задать исходные данные и указать требуемую форму выдачи результатов. На основании введенной информации программа-генератор должна создать рабочую программу решения задачи.

Каждая группа языков характеризуется некоторым уровнем. Считается, что уровень языка тем выше, чем более он абстрагирован от конкретного машинного языка. Иначе, говоря, язык принадлежит к более высокому уровню, если его операторы инициируют большее число машинных команд, чем операторы другого языка.


А также другие работы, которые могут Вас заинтересовать

39480. Расчет годовой производственной программы ЭТС 103.5 KB
Парк электрооборудования постоянно увеличивается. Опыт электрификации сельского хозяйства показывает что без хорошей работы электротехнической эксплуатационной службы только увеличение числа электроустановок не дает ожидаемого роста эффективности производства и не позволяет полностью использовать потенциальные возможности электрооборудования. Эксплуатационная надежность электрооборудования пока еще не удовлетворяет в достаточной мере требованиям сельскохозяйственного производства. Улучшение эксплуатации...
39481. Безопасность жизнедеятельности. Характеристика условий труда программиста 1.09 MB
В связи с этим была создана и развивается наука о безопасности труда и жизнедеятельности человека. Охрана здоровья трудящихся обеспечение безопасности условий труда ликвидация профессиональных заболеваний и производственного травматизма составляет одну из главных забот человеческого общества. Обращается внимание на необходимость широкого применения прогрессивных форм научной организации труда сведения к минимуму ручного малоквалифицированного труда создания обстановки исключающей профессиональные заболевания и производственный...
39483. Использование наноматериалов в строительном материаловедении 1.34 MB
«Нано» (от греческого слова «nanos» – карлик) – это приставка, обозначающая одну миллиардную долю исходной единицы. Поскольку в СИ единицей длины является метр, то нанометр означает одну миллиардную долю метра или миллионную долю миллиметра
39484. Разработка информационной системы сопровождения кредитной истории клиентов 3.89 MB
Установление структуры и форм входных и выходных данных. Расчёт освещения Постоянное развитие и совершенствование вычислительной техники и программного обеспечения приводит к возникновению все новых технологий обработки данных. Поэтому эффективность системы обработки зависит от правильной организации входных и выходных потоков информации. Представить выходную информацию в необходимых для пользователя электронных форматах и виде печатных документов.
39485. Разработка автоматизированной системы мониторинга деятельности спортивной организации «Весна» 1.61 MB
Цель и главная задача дипломной работы заключается в разработке автоматизированной системы мониторинга деятельности спортивной организации «Весна», деятельность которой состоит правильному физическому развитию и оздоровлению для подростков.
39487. Разработка сайта МКДОУ № 17 3.14 MB
Общие принципы создания webстраниц.Основные элементы webстраниц. Введение В вопросе разработки и создания Webстраниц в сети Интернет накоплен огромный багаж различных методов способов и технологий многие из которых к сожалению сейчас уже являются условно применимыми. Поэтому представляется актуальным и практически важным рассмотреть проблему проектирования Webсайта в современных условиях с использованием всего спектра достижений накопленных в данной области.
39488. Создание автоматизированной системы оптимизации затрат на доставку грузов на транспортном предприятии 882.5 KB
Логистическая организация товародвижения на практике реализуется как регулярный целенаправленный процесс воздействия на всех уровнях и на всех стадиях оборота товаров и услуг на факторы и условия обеспечивающие достижение и поддержание экономного и эффективного процесса физического продвижения товара на рынке. Организационные усилия направленные на повышение эффективности товародвижения могут быть сведены к двум аспектам: оперативному и стратегическому.3] Формирование оптимального режима товародвижения с последующей его корректировкой в...

Fortran (Фортран). Это первый компилируемый язык, созданный в 50-е годы. В Фортране впервые был реализован ряд важнейших понятий программирования. Удобство создания программ было положено в основу возможностей языка. Фортран продолжает активно использоваться во многих организациях.

Cobol (Кобол). Это компилируемый язык для применения в экономической области и решения бизнес - задач, разработанный в начале 60-х годов. В Коболе были реализованы очень мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях.

Algol (Алгол). Компилируемый язык, созданный в 1960г. В 1968г. была создана версия Алгол 68, по своим возможностям и сегодня опережающая многие языки программирования.

Pascal (Паскаль). Язык Паскаль, созданный в конце 70-х годов, во многом напоминает Алгол, но в нем ужесточен ряд требований к структуре программы и имеются возможности, позволяющие успешно применять его при создании крупных проектов. Дальнейшим развитием этого языка явилась более эффективная версия – Object Pascal, который лег в основу современного объектно-ориентированного языка программирования Delphi.

Basic (Бейсик). Этот язык по популярности занимает первое место в мире. Для этого языка имеются и компиляторы, и интерпретаторы. Он создавался в 60-х годах в качестве учебного языка и очень прост в изучении. Дальнейшим развитием этого языка явился язык объектно-ориентированного программирования (ООП) VISUAL BASIC FOR APPLICATION

С (Си). Данный язык был создан в лаборатории Bell (США). Он планировался для замены ассемблера, чтобы иметь возможность создавать столь же эффективные и компактные программы, и в то же время не зависеть от конкретного типа процессора. Язык Си во многом похож на Паскаль и имеет дополнительные средства для прямой работы с памятью (указатели). На этом языке в 70-е годы написано множество прикладных и системных программ и ряд известных операционных систем (Unix).

C++ (Си++). Этот язык, являющийся объектно-ориентированным, - расширение языка Си был разработан в 1980 г. В нем реализовано множество новых мощных возможностей, которые позволили резко повысить производительность труда программистов, однако создание сложных и надежных программ требует от разработчиков профессиональной подготовки высокого уровня.

Java (Ява). Этот язык был создан компанией Sun (США) в начале 90-х годов на основе Си++. Он призван упростить разработку приложений на основе Си++ путем исключения из него всех низкоуровневых возможностей. Главная особенность этого языка - компиляция не в машинный код, а в платформенно-независимый байт-код (каждая команда занимает один байт). Этот байт-код может выполняться с помощью интерпретатора - виртуальной Java-машины JVM (Java Virtual Machine), версии которой созданы сегодня для любых платформ. Особое внимание в развитии этого языка уделяется двум направлениям: поддержке всевозможных мобильных устройств и микрокомпьютеров, встраиваемых в бытовую технику; созданию платформенно - независимых программных модулей, способных работать на серверах в глобальных и локальных сетях с различными операционными системами.

C#. По технологическим показателям подобен языку Java и находится между компилируемыми и интерпретируемыми языками. Программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной.

Области применения современных ЭВМ настолько обширны и разнообразны, что существует большое число специализированных языков в различных областях науки и техники. Например, язык программирования баз данных SQL, язык разметки гипертекста HTML, язык программирования задач компьютерного инженерного анализа APDL системы ANSYS и другие.

Языки программирования баз данных

Эта группа языков отличается от алгоритмических языков, прежде всего решаемыми задачами. База данных - это файл (или группа файлов), представляющий собой упорядоченный набор записей, имеющих единообразную структуру и организованных по единому шаблону (как правило, в табличном виде). База данных может состоять из нескольких таблиц. Удобно хранить в базах данных различные сведения из справочников, картотек, журналов бухгалтерского учета и т. д. Для этого был создан структурированный язык запросов SQL (Structured Query Language). Он основан на мощной математической теории и позволяет выполнять эффективную обработку баз данных, манипулируя не отдельными записями, а группами записей.

Для управления большими базами данных и их эффективной обработки разработаны СУБД (Системы Управления Базами Данных). Практически в каждой СУБД помимо поддержки языка SQL имеется свой уникальный язык, ориентированный на особенности этой СУБД и не переносимый на другие системы. Сегодня в мире насчитывается пять ведущих производителей СУБД: Microsoft (SQL Server), IBM (DB2), Oracle, Software AG (Adabas), Informix и Sybase. Их продукты нацелены на поддержку одновременной работы тысяч пользователей в сети, а базы данных могут храниться в распределенном виде на нескольких серверах.

С появлением персональных компьютеров были созданы так называемые настольные СУБД. Родоначальником современных языков программирования баз данных для ПК принято считать СУБД dBase II, язык которой был интерпретируемым. Затем для него были созданы компиляторы, появились СУБД FoxPro и Clipper, поддерживающие диалекты этого языка. Сегодня похожие, но несовместимые версии языков семейства dBase реализованы в продуктах Visual FoxPro фирмы Microsoft и Visual dBase фирмы Inprise.

Языки программирования для Интернета

С активным развитием глобальной сети было создано немало популярных языков программирования, адаптированных специально для Интернета. Все они отличаются характерными особенностями: языки являются интерпретируемыми, интерпретаторы для них распространяются бесплатно, а сами программы - в исходных текстах. Такие языки называют скрипт-языками .

HTML. Общеизвестный язык для оформления документов. Он очень прост и содержит элементарные команды форматирования текста, добавления рисунков, задания шрифтов и цветов, организации ссылок и таблиц. Все Web-страницы написаны на языке HTML или используют его расширения.

Perl. Был разработан в 80-х годах Ларри Уоллом. По мощности Perl значительно превосходит языки типа Си. В него введено много часто используемых функций работы со строками, массивами, всевозможные средства преобразования данных, управления процессами, работы с системной информацией и др.

VRML. Был создан в1994 г. для организации виртуальных трехмерных интерфейсов в Интернете. Он позволяет описывать в текстовом виде различные трехмерные сцены, освещение и тени, текстуры (покрытия объектов), вращать в любых направлениях, масштабировать, регулировать освещенность и т. д.

Языки моделирования

При создании программ и формировании структур баз данных нередко применяются формальные способы их представления - формальные нотации, с помощью которых можно визуально представить таблицы баз данных, поля, объекты программы и взаимосвязи между ними в системе, имеющей специализированный редактор и генератор исходных текстов программ на основе созданной модели. Такие системы называются CASE-системами. В них активно применяются нотации IDEF, а в последнее время все большее распространение получает UML.

Языки визуального программирования интерфейса

Программирование вручную привычных пользователю окон, кнопок, меню, обработка событий мыши и клавиатуры, включение в программы изображений и звука требовало все больше и больше времени программиста. Выход из этой ситуации обозначился благодаря двум подходам.

Первый - стандартизация многих функций интерфейса, благодаря чему появилась возможность использовать библиотеки, имеющиеся, например, в Windows. В итоге при смене стиля графического интерфейса приложения смогли автоматически приспосабливаться к новой системе без какого-либо перепрограммирования.

Вторым революционным шагом явилось появление визуального программирования, возникшего в Visual Basic и нашедшего блестящее воплощение в Delphi и С++Builder фирмы Borland. Визуальное программирование позволило свести проектирование пользовательского интерфейса к простым и наглядным процедурам, которые дают возможность за минуты или часы сделать то, на что ранее уходили месяцы работы.

Из универсальных языков программирования сегодня наиболее популярны следующие: Бейсик (Basic), Паскаль (Pascal), Си++ (C++), Ява (Java), Дельфи (Delphi), С#. Для каждого из этих языков программирования сегодня имеется немало систем программирования, выпускаемых различными фирмами. Наиболее популярны следующие визуальные среды быстрого проектирования программ для Windows:

Basic: Microsoft Visual Basic;

Pascal: Borland Delphi;

C++: Borland C++Bulider;

Java: Symantec Cafe.

Для разработки серверных и распределенных приложений можно использовать систему программирования Microsoft Visual C++, продукты фирмы Borland, практически любые средства программирования на Java.

Основные этапы технологии программирования

Технологии программированиявключают следующие основные этапы: постановка задачи, разработка математической модели, разработка алгоритма, программирование, отладка программы, передача программы в эксплуатацию и научно-техническое сопровождение (НТС) программы, завершение жизненного цикла:

Постановка задачи

На этом этапе определяются основные цели и функции, выполнение которых должна обеспечивать программа, исходные данные, требования к исходным данным, выходные данные. Математическая постановка задачи сводится к точному описанию исходных данных, условий задачи и целей ее решения с использованием математических выражений в общем виде. При этом должен применяться системный подход , то есть предмет должен быть исследован всесторонне, учтены все внешние и внутренние связи и их влияние на конечные результаты. Задача представляется в виде «черного ящика», на вход которого поступают исходные данные, ограничения на входные параметры, требования к входным и выходным параметрам, а выходом является значения результирующих параметров.

Разработка математической модели

На данном этапе производится декомпозиция задачи, формализация, разработка математической модели, выбор метода решения. Под декомпозицией понимается разделение задачи на простые блоки, каждый из которых может разрабатываться самостоятельно и связан с другими частями программы только входными и выходными данными. Для деления задачи на блоки чаще всего используется функциональный подход. Например, в каждой вычислительной задаче можно выделить такие блоки, как ввод данных, вычислительный блок, блоки сохранения результатов вычислений на дисках, анализа результатов вычислений, графического представления результатов вычислений, печати результатов.

Разработка алгоритма программы

На этом этапе разрабатывается алгоритм решения задачи. Разработка алгоритма предполагает определение состава функциональных модулей и формирование общей схемы алгоритма, разработку алгоритмов функциональных модулей. В зависимости от сложности задачи алгоритм представляют вначале в общем виде (укрупненном). Затем каждый из блоков алгоритма разбивается на более мелкие задачи таким образом, чтобы на конечном этапе получить базовые схемы алгоритмов. Такой метод проектирования называется нисходящей разработкой алгоритма (проектирования).

Основные подходы к разработке алгоритмов и программ: структурное проектирование; информационное моделирование предметной области и связанных с ней приложений; объектно-ориентированное проектирование.

В основе структурного проектирования лежит последовательная декомпозиция, целенаправленное структурирование на отдельные составляющие. Типичными методами структурного проектирования являются: нисходящее проектирование, кодирование и тестирование программ; модульное программирование; структурное программирование.

Модульное программирование основано на понятии модуля. Модуль – логически взаимосвязанная совокупность функциональных элементов, оформленных в виде отдельных программных модулей, имеющих один вход и один выход. Структурное программирование основано на модульной структуре программного продукта и типовых управляющих структурах алгоритмов обработки данных различных программных модулей. Структурное программирование применяется в основном при программировании отдельных модулей и заключается в переводе алгоритма программы на алгоритмический язык с использованием определенных конструкций языка программирования.

Информационное моделирование предметной области и связанных с ней приложений предполагает определение состава и способа представления исходных данных и результатов вычислений.

Объектно-ориентированное проектирование основано на использовании при программировании объектов − функциональных программных модулей, которые на экране монитора представлены в виде элементов, например, кнопок, списков, переключателей и т. п., обладающих определенной совокупностью свойств, методов и событий.

Программирование

Программа – упорядоченная последовательность команд (предписаний) компьютера для решения задач. В общетеоретическом плане программирование – это теоретическая и практическая деятельность, связанная с созданием программы. В узком смысле под программированием понимается запись алгоритма с использованием команд и операторов одного из языков программирования – кодирование.

Отладка программы

Отладка программы заключается в проверке правильности функционирования алгоритма решения задачи с помощью контрольных примеров – тестов, результаты решения которых заранее известны; устранении обнаруженных синтаксических и логических ошибок.

Научно-техническое сопровождение

Научно-техническое сопровождение программы предусматривает контроль над работой программы и устранение ошибок, обнаруженных в процессе эксплуатации, доработку программы и ее совершенствование в соответствии с требованиями заказчика.

Свойства алгоритмов

Алгоритм - это точно определенная (однозначная) последователь­ность простых (элементарных) действий, обеспечивающих решение любой задачи из некоторого класса. Алгоритмам характерны следующие общие свойства:

1) дискретность - алгоритм можно разделить на отдельные шаги (дей­ствия), выполнение каждого из которых возможно только после заверше­ния всех операций на предыдущем шаге;

2) детерминированность - совокупность промежуточных величин на любом шаге однозначно определяется системой величин, имевшихся на предыдущем шаге;

3) элементарность шагов - закон получения последующей системы величин из предыдущей должен быть простым и локальным;

4) направленность - если способ получения последующих величин из каких-либо исходных не приводит к результату, то должно быть указано, что следует считать результатом алгоритма;

5) массовость - начальная система величин может выбираться из
некоторого множества (т.е. один алгоритм может применяться для
решения класса задач).

Формализация представления алгоритмов

Поскольку лю­бой алгоритм является набором входных, промежуточных и выходных данных, то для его описания и системы правил преобразования служит оп­ределенный язык. Естественные языки являются изменчивыми, неодно­значными и избыточными и не подходят для записи алгоритмов, требую­щих однозначной определенности. Наиболее простой путь устранения этих недостатков - построение искусственных языков со строгим синтаксисом и полной смысловой определенностью. Такие языки получили название формальных.

В любом языке можно выделить две составляющих - синтак­сис и семантику.

Синтаксис (грамматика языка) - совокупность правил, согласно кото­рым в данном языке строятся конструкции.

Семантика - смысловая сторона языка, соотносит единицы и конст­рукции языка с некоторым внешним миром, для описания которого язык используется.

Синтаксис формального языка задается некоторой системой правил, которая из небольшого набора исходных конструкций порождает все до­пустимые их комбинации, т.е. язык образуется как множество разрешен­ных правилами сочетаний исходных конструкций. Кроме того, синтаксис содержит формулировку условия, которое выполняется для законченных конструкций языка и не выполняется в противном случае. Наиболее на­глядным способом описания формального языка является синтаксическая диаграмма.

Синтаксическая диаграмма - схема (графическое представление) описания какого-либо нетерминального символа языка-объекта. Схема всегда имеет один вход и один выход, а её элементы соединяются между собой направленными линиями, указывающими порядок следования объ­ектов в определенном нетерминальном символе.

В представлении алгоритмов можно выделить две основные формы: символьную (словесную) и графическую.

Строчная фор­ма записи является основным способом представления алгоритмов последовательностью строк, каждая из кото­рых содержит описание одного или нескольких элементарных действий. Логика алгоритма (порядок действий) задается в явном виде путём указания метки последующей строки (в виде порядковых чисел или букв), или в не­явном - по умолчанию передается строке, следующей за выполненной. Данный способ позволяет записать алгоритмическую нотацию для любого исполнителя - как человека, так и технического устройства. Недостатком строчной формы является неудобство целостного восприятия его логиче­ской структуры.

Формами строчной записи алгоритмов являются:

1) пошагово-словесная форма - пронумерованная последовательность строк, содержащих описания конкретных действий на естественном языке;

2) формула - строчная запись действий, обеспечивающих обработку числовых, символьных или логических данных;

3) псевдокод - ориентированный на исполнителя «человек» частично формализованный язык, позволяющий записывать алгоритмы в форме, близкой к англоподобным языкам программирования;

4) язык программирования - искусственный формализованный язык, предназначенный для записи алгоритма для исполнителя «компьютер», метаязыком которого является естественный язык.

Графическая форма записи или блок-схема для представления отдель­ных блоков алгоритма использует набор геометрических фигур согласно требованиям ГОСТ 19.701–90 «Схемы алгоритмов, программ, данных и систем, условные обозначения и правила выполнения Единой системы программной документации». Достоинство данной формы записи заключается в на­глядности: блок-схема позволяет охватить весь алгоритм сразу, отследить различные варианты его исполнения, позволяет сделать записи, как на ес­тественном, так и на формальном языках.

Процедурное, объектно-ориентированное и логическое программирование

Поскольку ассемблер - машинно-зависимый язык, то записанная на нем программа может выполняться только на той технике (тем типом про­цессора), ассемблер которого был использован. Этот недостаток отсутст­вует у языков высокого уровня, которые ориентированы не на систему ко­манд той или иной машины, а на систему операторов, характерных для за­писи определенного класса алгоритмов (операторы присваивания, условные операторы, циклы, операторы ввода-вывода).

Таблица 1.3 Различия концепций программирования

Концепция про­граммирования Представление программ и данных Исполнение программы Связь частей программы между собой
Процедурное Программа и дан­ные представляют собой не связан­ные друг с другом элементы Последовательное выполнение операторов Возможна толь­ко через совме­стно обрабаты­ваемые данные
Объектно-ориентированное Данные и методы их обработки ин­капсулированы в рамках единого объекта Последователь­ность событий и реакций объектов на эти события Отдельные час­ти программы могут наследо­вать методы и элементы дан­ных друг у друга
Логическое Данные и правила их обработки объ­единены в рамках единого логиче­ского и структур­ного образования Преобразование логического обра­зования в соответ­ствии с логиче­скими правилами Разбиение про­граммы на от­дельные незави­симые части за­труднительно

Контрольные вопросы:

1. Что включает в себя базовое программное обеспечение?

2. Какие программные средства относятся к прикладному прог-

раммному обеспечению?

3. Назовите классификационные признаки операционных систем.

4. Назовите наиболее известные операционные системы, применяемые на персональных компьютерах.

5. Что такое файловая система, для чего она предназначена?

6. Что такое файл?

7. Что такое имя, расширение и спецификация файла? Приведите примеры записи спецификации файла.

8. Назовите наиболее распространенные расширения имен файлов. Что они означают?

9. Поясните, что такое маска. Приведите примеры использования масок.

10. Что такое атрибут файла, какие атрибуты имеет файл?

11. Что такое каталог? Какая информация в нем содержится?

12. Что такое спецификация файла? Приведите примеры.


2 ОСНОВНЫЕ ПРОГРАММНЫЕ СРЕДСТВА ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Поддержите проект — поделитесь ссылкой, спасибо!
Читайте также
Создание и удаление групп в Steam Как сделать группу в steam Создание и удаление групп в Steam Как сделать группу в steam Какие службы в Windows нужны, а какие можно отключить Какие службы в Windows нужны, а какие можно отключить Антенны и Усилители для приема Радио FM и УКВ, направленные и круговые для дома, дачи и автомобиля Антенны и Усилители для приема Радио FM и УКВ, направленные и круговые для дома, дачи и автомобиля