Контрольная работа: Основы алгоритмизации и программирования
![](/file/7d5aacc146456be8f3642.jpg)
⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
САРАПУЛЬСКИЙ ПРОМЫШЛЕННО-ЭКОНОМИЧЕСКИЙ ТЕХНИКУМ
«ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ»
1. ПОНЯТИЕ АЛГОРИТМА.................................................................. 3
2. ЭЛЕМЕНТЫ ЯЗЫКА TURBO PASCAL........................................... 13
2.1. Алфавит....................................................................................... 13
2.2. Идентификаторы......................................................................... 14
2.3. Комментарии............................................................................... 14
3. ЛЕКСИКА ЯЗЫКА С++..................................................................... 16
4. ЛИТЕРАТУРА.................................................................................... 21
Одним из фундаментальных понятий в информатике является понятие алгоритма. Происхождение самого термина «алгоритм» связано с математикой. Это слово происходит от Algorithmi
– латинского написания имени Мухаммеда аль-Хорезми (787 – 850) выдающегося математика средневекового Востока. В своей книге "Об индийском счете" он сформулировал правила записи натуральных чисел с помощью арабских цифр и правила действий над ними столбиком. В дальнейшем алгоритмом стали называть точное предписание, определяющее последовательность действий, обеспечивающую получение требуемого результата из исходных данных.
Алгоритм может быть предназначен для выполнения его человеком или автоматическим устройством. Создание алгоритма, пусть даже самого простого, - процесс творческий. Он доступен исключительно живым существам, а долгое время считалось, что только человеку. В XII в. был выполнен латинский перевод его математического трактата, из которого европейцы узнали о десятичной позиционной системе счисления и правилах арифметики многозначных чисел. Именно эти правила в то время называли алгоритмами.
Данное выше определение алгоритма нельзя считать строгим – не вполне ясно, что такое «точное предписание» или «последовательность действий, обеспечивающая получение требуемого результата». Поэтому обычно формулируют несколько общих свойств алгоритмов, позволяющих отличать алгоритмы от других инструкций.
· Дискретность (прерывность, раздельность)
– алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или ранее определенных) шагов. Каждое действие, предусмотренное алгоритмом, исполняется только после того, как закончилось исполнение предыдущего.
· Определенность
– каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.
· Результативность (конечность)
– алгоритм должен приводить к решению задачи за конечное число шагов.
· Массовость
– алгоритм решения задачи разрабатывается в общем виде, то есть, он должен быть применим для некоторого класса задач, различающихся только исходными данными. При этом исходные данные могут выбираться из некоторой области, которая называется областью применимости алгоритма.
На основании этих свойств иногда дается определение алгоритма, например: “Алгоритм – это последовательность математических, логических или вместе взятых операций, отличающихся детерменированностью, массовостью, направленностью и приводящая к решению всех задач данного класса за конечное число шагов”. Такая трактовка понятия “алгоритм” является неполной и неточной. Во-первых, неверно связывать алгоритм с решением какой-либо задачи. Алгоритм вообще может не решать никакой задачи. Во-вторых, понятие “массовость” относится не к алгоритмам как к таковым, а к математическим методам в целом. Решение поставленных практикой задач математическими методами основано на абстрагировании – мы выделяем ряд существенных признаков, характерных для некоторого круга явлений, и строим на основании этих признаков математическую модель, отбрасывая несущественные признаки каждого конкретного явления. В этом смысле любая математическая модель обладает свойством массовости. Если в рамках построенной модели мы решаем задачу и решение представляем в виде алгоритма, то решение будет “массовым” благодаря природе математических методов, а не благодаря “массовости” алгоритма.
Разъясняя понятие алгоритма, часто приводят примеры “бытовых алгоритмов”: вскипятить воду, открыть дверь ключом, перейти улицу и т. д.: рецепты приготовления какого-либо лекарства или кулинарные рецепты являются алгоритмами. Но для того, чтобы приготовить лекарство по рецепту, необходимо знать фармакологию, а для приготовления блюда по кулинарному рецепту нужно уметь варить. Между тем исполнение алгоритма – это бездумное, автоматическое выполнение предписаний, которое в принципе не требует никаких знаний. Если бы кулинарные рецепты представляли собой алгоритмы, то у нас просто не было бы такой специальности – повар.
Правила выполнения арифметических операций или геометрических построений представляют собой алгоритмы. При этом остается без ответа вопрос, чем же отличается понятие алгоритма от таких понятий, как “метод”, “способ”, “правило”. Можно даже встретить утверждение, что слова “алгоритм”, “способ”, “правило” выражают одно и то же (т.е. являются синонимами), хотя такое утверждение, очевидно, противоречит “свойствам алгоритма”.
Само выражение “свойства алгоритма” некорректно. Свойствами обладают объективно существующие реальности. Можно говорить, например, о свойствах какого-либо вещества. Алгоритм – искусственная конструкция, которую мы сооружаем для достижения своих целей. Чтобы алгоритм выполнил свое предназначение, его необходимо строить по определенным правилам. Поэтому нужно говорить не о свойствах алгоритма, а о правилах построения алгоритма, или о требованиях, предъявляемых к алгоритму.
Первое правило – при построении алгоритма прежде всего необходимо задать множество объектов, с которыми будет работать алгоритм. Формализованное (закодированное) представление этих объектов носит название данных. Алгоритм приступает к работе с некоторым набором данных, которые называются входными, и в результате своей работы выдает данные, которые называются выходными. Таким образом, алгоритм преобразует входные данные в выходные.
Это правило позволяет сразу отделить алгоритмы от “методов” и “способов”. Пока мы не имеем формализованных входных данных, мы не можем построить алгоритм.
Второе правило – для работы алгоритма требуется память. В памяти размещаются входные данные, с которыми алгоритм начинает работать, промежуточные данные и выходные данные, которые являются результатом работы алгоритма. Память является дискретной, т.е. состоящей из отдельных ячеек. Поименованная ячейка памяти носит название переменной. В теории алгоритмов размеры памяти не ограничиваются, т. е. считается, что мы можем предоставить алгоритму любой необходимый для работы объем памяти.
В школьной “теории алгоритмов” эти два правила не рассматриваются. В то же время практическая работа с алгоритмами (программирование) начинается именно с реализации этих правил. В языках программирования распределение памяти осуществляется декларативными операторами (операторами описания переменных). В языке Бейсик не все переменные описываются, обычно описываются только массивы. Но все равно при запуске программы транслятор языка анализирует все идентификаторы в тексте программы и отводит память под соответствующие переменные.
Третье правило – дискретность. Алгоритм строится из отдельных шагов (действий, операций, команд). Множество шагов, из которых составлен алгоритм, конечно.
Четвертое правило – детерменированность. После каждого шага необходимо указывать, какой шаг выполняется следующим, либо давать команду остановки.
Пятое правило
– сходимость (результативность). Алгоритм должен завершать работу после конечного числа шагов. При этом необходимо указать, что считать результатом работы алгоритма.
Итак, алгоритм – неопределяемое понятие теории алгоритмов. Алгоритм каждому определенному набору входных данных ставит в соответствие некоторый набор выходных данных, т. е. вычисляет (реализует) функцию. При рассмотрении конкретных вопросов в теории алгоритмов всегда имеется в виду какая-то конкретная модель алгоритма.
Любая работа на компьютере – это есть обработка информации. Работу компьютера можно схематически изобразить следующим образом:
“Информация” слева и “информация” справа – это разные информации. Компьютер воспринимает информацию извне и в качестве результата своей работы выдает новую информацию. Информация, с которой работает компьютер, носит название “данные”.
Компьютер преобразует информацию по определенным правилам. Эти правила (операции, команды) заранее занесены в память компьютера. В совокупности эти правила преобразования информации называются алгоритмом. Данные, которые поступают в компьютер, называются входными данными. Результат работы компьютера – выходные данные. Таким образом, алгоритм преобразует входные данные в выходные:
Теперь можно поставить вопрос: а может ли человек обрабатывать информацию? Конечно, может. В качестве примера можно привести обычный школьный урок: учитель задает вопрос (входные данные), ученик отвечает (выходные данные). Самый простой пример: учитель дает задание – умножить 6 на 3 и результат написать на доске. Здесь числа 6 и 3 – входные данные, операция умножения – алгоритм, результат умножения – выходные данные:
Вывод: решение математических задач – частный случай преобразования информации. Компьютер (по-английски означает вычислитель, на русском языке – ЭВМ, электронная вычислительная машина) был создан как раз для выполнения математических расчетов.
При решении любой математической задачи мы составляем алгоритм решения. Но прежде мы сами и выполняли этот алгоритм, то есть доводили решение до ответа. Теперь же мы будем только писать, что нужно сделать, но вычисления проводить не будем. Вычислять будет компьютер. Наш алгоритм будет представлять собой набор указаний (команд) компьютеру.
Когда мы вычисляем какую-либо величину, мы записываем результат на бумаге. Компьютер записывает результат своей работы в память в виде переменной. Поэтому каждая команда алгоритма должна включать указание, в какую переменную записывается результат.
Трактовка работы алгоритма как преобразования входных данных в выходные естественным образом подводит нас к рассмотрению понятия “постановка задачи”. Для того чтобы составить алгоритм решения задачи, необходимо из условия выделить те величины, которые будут входными данными и четко сформулировать, какие именно величины требуется найти. Другими словами, условие задачи требуется сформулировать в виде “Дано ... Требуется” – это и есть постановка задачи.
Алгоритм применительно к вычислительной машине
– точное предписание, т.е. набор операций и правил их чередования, при помощи которого, начиная с некоторых исходных данных, можно решить любую задачу фиксированного типа.
Виды алгоритмов как логико-математических средств отражают указанные компоненты человеческой деятельности и тенденции, а сами алгоритмы в зависимости от цели, начальных условий задачи, путей ее решения, определения действий исполнителя подразделяются следующим образом:
· Механические алгоритмы
, или иначе детерминированные, жесткие (например, алгоритм работы машины, двигателя и т.п.);
· Гибкие алгоритмы
, например стохастические, т.е. вероятностные и эвристические.
Механический алгоритм задает определенные действия, обозначая их в единственной и достоверной последовательности, обеспечивая тем самым однозначный требуемый или искомый результат, если выполняются те условия процесса, задачи, для которых разработан алгоритм.
· Вероятностный (стохастический) алгоритм
дает программу решения задачи несколькими путями или способами, приводящими к вероятному достижению результата.
· Эвристический алгоритм
(от греческого слова “эврика”) – это такой алгоритм, в котором достижение конечного результата программы действий однозначно не предопределено, так же как не обозначена вся последовательность действий, не выявлены все действия исполнителя. К эвристическим алгоритмам относят, например, инструкции и предписания. В этих алгоритмах используются универсальные логические процедуры и способы принятия решений, основанные на аналогиях, ассоциациях и прошлом опыте решения схожих задач.
· Линейный алгоритм
– набор команд (указаний), выполняемых последовательно во времени друг за другом.
· Разветвляющийся алгоритм
– алгоритм, содержащий хотя бы одно условие, в результате проверки которого ЭВМ обеспечивает переход на один из двух возможных шагов.
· Циклический алгоритм
– алгоритм, предусматривающий многократное повторение одного и того же действия (одних и тех же операций) над новыми исходными данными. К циклическим алгоритмам сводится большинство методов вычислений, перебора вариантов.
Цикл программы
– последовательность команд (серия, тело цикла), которая может выполняться многократно (для новых исходных данных) до удовлетворения некоторого условия.
Вспомогательный (подчиненный) алгоритм
(процедура) – алгоритм, ранее разработанный и целиком используемый при алгоритмизации конкретной задачи. В некоторых случаях при наличии одинаковых последовательностей указаний (команд) для различных данных с целью сокращения записи также выделяют вспомогательный алгоритм.
На всех этапах подготовки к алгоритмизации задачи широко используется структурное представление алгоритма.
Структурная (блок-, граф-) схема алгоритма
– графическое изображение алгоритма в виде схемы связанных между собой с помощью стрелок (линий перехода) блоков – графических символов, каждый из которых соответствует одному шагу алгоритма. Внутри блока дается описание соответствующего действия.
Графическое изображение алгоритма широко используется перед программированием задачи вследствие его наглядности, т.к. зрительное восприятие обычно облегчает процесс написания программы, ее корректировки при возможных ошибках, осмысливание процесса обработки информации.
Можно встретить даже такое утверждение: “Внешне алгоритм представляет собой схему – набор прямоугольников и других символов, внутри которых записывается, что вычисляется, что вводится в машину и что выдается на печать и другие средства отображения информации “. Здесь форма представления алгоритма смешивается с самим алгоритмом.
Принцип программирования “сверху вниз” требует, чтобы блок-схема поэтапно конкретизировалась и каждый блок “расписывался” до элементарных операций. Но такой подход можно осуществить при решении несложных задач. При решении сколько-нибудь серьезной задачи блок-схема “расползется” до такой степени, что ее невозможно будет охватить одним взглядом.
Блок-схемы алгоритмов удобно использовать для объяснения работы уже готового алгоритма, при этом в качестве блоков берутся действительно блоки алгоритма, работа которых не требует пояснений. Блок-схема алгоритма должна служить для упрощения изображения алгоритма, а не для усложнения.
При решении задач на компьютере необходимо не столько умение составлять алгоритмы, сколько знание методов решения задач (как и вообще в математике). Поэтому изучать нужно не программирование как таковое (и не алгоритмизацию), а методы решения математических задач на компьютере. Задачи следует классифицировать не по типам данных, как это обычно делается (задачи на массивы, на символьные переменные и т. д.), а по разделу “Требуется”.
В информатике процесс решения задачи распределяется между двумя субъектами: программистом и компьютером. Программист составляет алгоритм (программу), компьютер его исполняет. В традиционной математике такого разделения нет, задачу решает один человек, который составляет алгоритм решения задачи и сам выполняет его. Сущность алгоритмизации не в том, что решение задачи представляется в виде набора элементарных операций, а в том, что процесс решения задачи разбивается на два этапа: творческий (программирование) и не творческий (выполнение программы). И выполняют эти этапы разные субъекты – программист и исполнитель
В учебниках по информатике обычно пишут, что исполнителем алгоритма может быть и человек. На самом деле алгоритмы для людей никто не составляет (не будем забывать, что не всякий набор дискретных операций является алгоритмом). Человек в принципе не может действовать по алгоритму. Выполнение алгоритма – это автоматическое, бездумное выполнение операций. Человек всегда действует осмысленно. Для того чтобы человек мог выполнять какой-то набор операций, ему нужно объяснить, как это делается. Любую работу человек сможет выполнять только тогда, когда он понимает, как она выполняется.
Вот в этом – “объяснение и понимание” – и кроется различие между понятиями “алгоритм” и “способ”, “метод”, “правило”. Правила выполнения арифметических операций – это именно правила (или способы), а не алгоритмы. Конечно, эти правила можно изложить в виде алгоритмов, но толку от этого не будет. Для того чтобы человек смог считать по правилам арифметики, его нужно научить. А если есть процесс обучения, значит, мы имеем дело не с алгоритмом, а с методом.
При составлении алгоритма программист никому ничего не объясняет, а исполнитель не пытается ничего понять. Алгоритм размещается в памяти компьютера, который извлекает команды по одной и исполняет их. Человек действует по-другому. Чтобы решить задачу, человеку требуется держать в памяти метод решения задачи в целом, а воплощает этот метод каждый по-своему.
Очень ярко эта особенность человеческой психологии – неалгоритмичность мышления – проявилась в методическом пособии А. Г. Гейна и В. Ф. Шолоховича. В пособии излагаются решения задач из известного учебника. Решения задач должны быть представлены в виде алгоритмов. Однако авторы пособия понимают, что если просто написать алгоритм решения задачи, то разобраться в самом решении будет трудно. Поэтому они сначала приводят “нечеткое изложение алгоритма” (т. е. объясняют решение задачи), а затем пишут сам алгоритм.
Алфавит языка состоит из множества символов, включающих в себя буквы
, цифры
и специальные символы
.
Латинские буквы:
от A до Z (прописные) и от a до z (строчные).
Цифры:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Шестнадцатеричные цифры:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Специальные символы:
+ – * / = < > [ ] . , ( ) : ; { } ^ @ $ #.
Следующие комбинации специальных символов являются едиными символами (их нельзя разделять пробелами):
(**) ограничители комментариев (используются наряду с {});
Пробелы
– символ пробела (ASCII-32) и все управляющие символы кода ASCII (от 0 до 31).
К спецсимволам относятся служебные слова
, смысл которых определен однозначно. Служебные слова не могут быть использованы для других целей. С точки зрения языка это единые символы. Вот список служебных слов Турбо Паскаля:
Последние версии языка содержат еще ряд служебных слов, относящихся к работе с объектами и встроенным ассемблером.
Идентификатором называется символическое имя определенного программного объекта. Такими объектами являются имена констант, переменных, типов данных, процедур и функций, программ. С помощью синтаксической диаграммы идентификатор можно определить, как показано на рис.1.
Расшифровать это можно так: идентификатор – это любая последовательность букв и цифр, начинающаяся с буквы. В Турбо Паскале к буквам приравнивается также знак подчеркивания. Строчные и прописные буквы в идентификаторах и служебных словах не различаются. Например: max, MAX, MaX и mAx – одно и то же имя.
Длина идентификатора может быть произвольной, но значащими являются только первые 63 символа.
Следующие конструкции представляют собой комментарии и поэтому игнорируются компилятором:
{любой текст, не содержащий символ «}»}
(*любой текст, не содержащий символы «*)»*)
Буквы русского алфавита употребляются только в комментариях, в литерных и текстовых константах.
Строка, начинающаяся с символов {$ или (*$, является директивой компилятора
. За этими символами следует мнемоника команды компилятора.
3. ЛЕКСИКА ЯЗЫКА ПРОГРАММИРОВАНИЯ СИ
Множество символов Си включает большие и малые буквы латинского алфавита и 10 десятичных арабских цифр:
буквы и цифры используются при формировании констант, идентификаторов и ключевых слов. Компилятор Си рассматривает одну и ту же малую и большую буквы как различные символы.
Пробельные символы.
Пробел, табуляция, перевод строки, возврат каретки, новая страница, вертикальная табуляция и новая строка
– это символы, называемые пробельными
, поскольку они имеют то же самое назначение, что и пробелы между словами и строками на печатной странице. Эти символы разделяют объекты программы.
Знаки пунктуации и специальные символы
из множества символов Си используются для различных целей, от организации текста программы до определения заданий, которые будут выполнены компилятором или откомпилированной программой (табл. 3.1).
Таблица 3.1. Знаки пунктуации и специальные символы
ESC
-последовательности (эскейп-последовательности)
– это специальные символьные комбинации, которые представляют пробельные и неграфические символы в строках и символьных константах. Их типичное использование связано со спецификацией таких действий, как возврат каретки и табуляция, а также для задания символьных представлений некоторых кодов. ESC-последовательность состоит из наклонной черты влево, за которой следует буква, знаки пунктуации или комбинация цифр.
В табл. 3.2 приведен список ESC-последовательностей языка Си.
Таблица 3.2. ESC-последовательности
ASCII символ с восьмеричным представлением
ASCII символ в шестнадцатеричном представлении
Если наклонная черта влево предшествует символу, не включенному в этот список, то наклонная черта влево игнорируется. Например, изображение \c представляет символ «с» в символьной строке или констант-символе.
Последовательности \ddd и \xdd позволяют задать любой символ в ASCII как последовательность от одной до трех восьмеричных цифр или от одной до двух шестнадцатеричных цифр. Например, символ пробела может быть задан как \010, \10, \x08 или \x8. Код ASCII «нуль» может быть задан как \0 или \x0.
Операции.
Операции – это специальные комбинации символов, задающие действия по преобразованию различных величин.
В табл. 3.3 представлен список операций. Операции должны использоваться точно так, как они представлены в таблице: без пробельных символов между символами в тех операциях, которые представлены несколькими символами.
Вычитание, арифметическое отрицание
Побитовое включающее ИЛИ с присваиванием
Побитовое исключающее ИЛИ с присваиванием
Последовательное выполнение (запятая)
Ключевые слова.
Ключевые (зарезервированные) слова – это предопределенные последовательности символов, которые имеют специальное значение для компилятора Си. Их можно использовать только так, как они определены. Имена объектов программы не могут совпадать с названиями ключевых слов.
Комментарии.
Комментарий – это последовательность символов, которая воспринимается компилятором как отдельный пробельный символ или, другими словами, игнорируется.
Комментарий имеет следующую форму представления:
где <символы> может быть любой комбинацией символов из множества представимых символов, включая символы новой строки, но исключая комбинацию */. Это означает, что комментарии могут занимать более одной строки, но не могут быть вложенными.
Еще раз отметим, что компилятор Си рассматривает буквы верхнего и нижнего регистров как различные символы. Поэтому можно создать отдельные независимые идентификаторы, которые совпадают орфографически, но различаются большими и малыми буквами. Например, каждый из следующих идентификаторов является уникальным:
1. Голицына О.Л, Попов И.И. Основы алгоритмизации и программирования: Учеб. пособие. – М.: ФОРУМ: ИНФРА-М. 2004. – 432 с. – (серия «Профессиональное образование»).
2. Семакин И.Г., Шестаков А.П. Основы программирования: Учебник для среднего профессионального образования. – М.: Издательский центр «Академия». 2003. – 432 с.
3. Нестеренко А. В. ЭВМ и профессия программиста. М., Просвещение, 1990.
4. Брудно А. Л., Каплан Л. И. Московские олимпиады по программированию. М., Наука, 1990.
3. Гейн А.Г. и др.. Основы информатики и вычислительной техники. М., Просвещение, 1994.
4. Касаткин В.Н. Информация, алгоритмы, ЭВМ. М., Просвещение, 1991.
5. Гейн А. Г., Шолохович В.Ф. Преподавание курса “Основы информатики и вычислительной техники” в средней школе. Руководство для учителя. Екатеринбург, 1992.
6. Извозчиков В.А. Информатика в понятиях и терминах.
Название: Основы алгоритмизации и программирования
Раздел: Рефераты по информатике
Тип: контрольная работа
Добавлен 20:07:53 26 октября 2010 Похожие работы
Просмотров: 375
Комментариев: 13
Оценило: 2 человек
Средний балл: 5
Оценка: неизвестно Скачать
Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.
Контрольная работа: Основы алгоритмизации и программирования
Методы Остановки Кровотечений Реферат
Реферат по теме Отечественная история
Реферат по теме Трансформация традиционного уклада в Иордании
Курсовая работа по теме Анализ распределения и использования прибыли предприятия
Шаблон Для Ворда Курсовая По Госту
Дипломная работа по теме Развитие венчурного бизнеса в Российской Федерации
Реферат по теме Качество образования за рубежом
Курсовая работа по теме Сущность иерархичности систем
Доклад по теме Центральная догма молекулярной биологии
Европейский Суд Реферат
Реферат по теме Cальвадор Дали
Реферат: Евро как денежная единица
Учебное пособие: План-конспект уроку французької мови у 8-ому класі на тему: "Villes, villages, villes"
Реферат по теме Проблема водных ресурсов в региональной безопасности стран Персидского залива
Курсовая Работа Информационная Система Осаго
Виды Музыки Реферат
Контрольная Работа 2 Класс Афанасьева 1 Четверть
Контрольная работа: Норма труда и норма выработки
Доклад по теме Александр Матросов: жизнь за други своя
Реферат: Jim Casy In Grapes Of Wrath Essay
Контрольная работа: Древний Рим. Реформы Сервия Туллия
Реферат: Выборы и избирательные системы. Практика выборов в современной России
Реферат: The Roman Catholic View On Abortion Essay