Как сделать тест в delphi 7 radiogroup

Обновлено: 04.07.2024

Можно ли отключить определенный элемент в RadioGroup?

В примере показано как получить доступ к отдельным элементам компонента TRadioGroup.

procedure TForm1.Button1Click(Sender: TObject);

TRadioButton(RadioGroup1.Controls[ 1 ]).Enabled := False;

Поведение TAB в компоненте RadioGroup

При перемещении фокуса ввода клавишей Tab чтобы переместить его в RadioGroup нужно нажать клавишу Tab дважды если какой нибудь пункт RadioGroup уже выбран, но только один раз если не выбран. Можно ли сделать поведение RadioGroup логичным?

Установка свойства RadioGroup'ы TabStop в false должна решить эту проблему - поскольку клавиша tab будет продолжать работать - перемещаясь сразу на выделенный пункт RadioGroup.

Как заставить GroupBox прорисовать на форме свой Caption неактивным цветом?

Как заставить GroupBox1 прорисовать на форме свой Caption неактивным цветом? GroupBox1.Enabled:=FALSE не помогает. Хотя если то же самое проделать с Label1 или Edit1, то все получается.

RadioGroup - служит для создания группы кнопок типа RadioButton.



Вид компонента и пример использования:



Свойство Значение
Caption Определяет название радио-группы.
ItemIndex Определяет индекс выбранной радио-кнопки.
Items Список радио-кнопок. Каждая новая задается с новой строки.


Свойства Align, Constraints, Cursor, Enabled, Font, Height, Hint, ShowHint, Left, ParentColor, ParentFont, ParentShowHint, Name, PopupMenu, Top, Transparent, Visible, Width и некоторые другие являются общими для многих компонентов. О них вы можете прочесть здесь.

Как пользоваться группой компонентов RaidoButton (RadioGroup) в Delphi?


RadioGroup (Delphi)

Ни для кого не секрет, что объектно-ориентированный язык программирования Delphi использует довольно таки широкий набор компонентов. Одним из них является RadioGroup, который бывает таки часто используется в определённых видах программ. И вот возникает, как же пользоваться данным компонентом и вникнуть в его особенность?

Инструкция

1 шаг

Для начала необходимо понять, что RadioGroup – это компонент, объединяющий (группирующий) схожих по смыслу компонентов Delphi. В данном компоненте есть такое свойство, как ItemIndex, которое указывает на то, какая же кнопка находится во включённом состоянии в данный момент, по умолчанию данное свойство равно = -1. Задаётся вопрос почему именно -1? Ответ прост, нумерация кнопок начинает своё начало с 0, а значит если кнопка выключена, то данное значение равно -1!

2 шаг

Как пользоваться группой компонентов RaidoButton (RadioGroup) в Delphi?


Расположите компоненты примерно таким образом

Теперь перейдём к практике. Создайте новую форму в вашей программе Delphi и скиньте на неё следующие 4 компонента, которые находятся во вкладке Standard: RadioGroup, Button, Lable и Edit.
Расположите их примерно так как показано на скриншоте.

3 шаг

Затем измените свойства caption у ’button’a на “Нажать”, у ’label’a на “Номер” и у ’edit’a измените свойство text, также на “Номер”. Войдите в свойство items у radiogroup и впишите туда несколько строчек, к примеру:
Футбол
Большой теннис
Хоккей
Бейсбол
Дзюдо

4 шаг

Создайте обработчки OnClick для RadioGroup и впишите туда следующий код:

begin
Label1.Caption:=IntToStr(RadioGroup1.ItemIndex);
end;

Здесь свойство ItemIndex у RadioGroup показывает какая кнопка сейчас включена и выводит ответ в Label.

5 шаг

Создайте обработчки OnClick для кноки и впишите туда следующее:

begin
Edit1.Text:=IntToStr(RadioGroup1.ItemIndex);
end;

Здесь происходит то же самое, что и в предыдущем шаге, но на этот раз ответ выводится в Edit, при нажатии на кнопку.

6 шаг

Как пользоваться группой компонентов RaidoButton (RadioGroup) в Delphi?


Вот так вот будет выглядеть рабочее окно данной небольшой программы

Запустите вашу программу (которую вы можете запустить с помощью клавиши F9, либо посредством небольшой зелёненькой стрелочки вверху программы Delphi) и начинайте проверять её работоспособоность! Данные шаги помогут вам заложить начальную базу о данном компоненте и дадут понять, что компонент RadioGroup является очень полезным в некоторых видах программ.

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

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

Данном курсовом проекте рассмотрен программный продукт “Методика многофакторного исследования личности Р. Кеттелла”. Он представляет собой опросник из 187 вопросов, определяющий шестнадцать факторов личности и дает многогранную информацию о личностных чертах, которые называют конституционны­ми факторами, предложен Р. Кеттеллом.

Глава 1.Аналитический обзор 1.1.Компоненты

Создавая данную программу я использовал различные компоненты, такие как button, combobox, edit, label, radiogroup, statictext, memo.

Простейшей и, пожалуй, наиболее часто используемой кнопкой является кнопка Button (см. на рис. 5.1 в верхнем левом углу формы), расположенная на странице библиотеки Standard.

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

if (key='C' or key='c') then Button1.Click;

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

csDropDown - Выпадающий список со строками одинаковой высоты и с окном редактирования, позволяющим пользователю вводить или редактировать текст;

csSimple - Развернутый список со строками одинаковой высоты и с окном редактирования, позволяющим пользователю вводить или редактировать текст;

csDropDownList - Выпадающий список со строками одинаковой высоты, не содержащий окна редактирования.

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

Если в окне проводилось редактирование данных, то ItemIndex = -1. По этому признаку можно определить, что редактирование проводилось.

Свойство MaxLength определяет максимальное число символов, которые пользователь может ввести в окно редактирования.

Если MaxLength = 0, то число вводимых символов не ограничено.

В компоненте Edit вводимый и выводимый текст содержится в свойстве Text. Это свойство можно устанавливать в процессе проектирования или задавать программно. Выравнивание текста, как это имело место в метках и панелях, невозможно. Перенос строк тоже невозможен. Текст, не помещающийся по длине в окно, просто сдвигается и пользователь может перемещаться по нему с помощью курсора. Свойство AutoSize в окнах редактирования имеет смысл, отличный от смысла аналогичного свойства меток: автоматически подстраивается под размер текста только высота, но не ширина окна.

Edit можно использовать и просто как компоненты отображения текста. Для этого надо установить в true его свойство ReadOnly и целесообразно установить AutoSelect в false. В этом случае пользователь не сможет изменять отображаемый текст и окно редактирования становится подобным меткам. При использовании окон редактирования для вывода, ввода и редактирования чисел необходимо использовать функции взаимного преобразования строк и чисел. Для вывода это описанные при рассмотрении меток функции FloatToStr и IntToStr. При вводе это функции StrToFloat — преобразование строки в значение с плавающей запятой, и StrToInt — преобразование строки в целое значение. Если вводимый текст не соответствует числу (например, содержит недопустимые символы), то функции преобразования генерируют исключение EConvertError. Поэтому в программе необходимо предусмотреть обработку этого исключения. Например:

excepton EConvertError do

ShowMessage('Вы ввели ошибочное число;

Этот оператор подменит все символы, кроме цифр и запятой, нулевым символом, который не занесется в текст окна Edit.

Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. В противном случае значение MaxLength указывает максимальное число символов, которое может ввести пользователь.

Для отображения различных надписей на форме используются в основном компоненты Label, StaticText (появившийся только в Delphi 3) и Panel. Первые два из этих компонентов — метки, специально предназначенные для отображения текстов.

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

Label1.Caption := 'Новый текст';

Label1.Caption := 'Число сотрудников: '+IntToStr(I);

Во всех компонентах цвет фона определяется свойством Color, а цвет надписи — подсвойством Color свойства Font.

Для метки Label цвет и шрифт — единственно доступные элементы оформления надписи. Компонент StaticText имеет кроме того свойство BorderStyle, определяющее рамку текста — бордюр.

Размер меток Label и StaticText определяется также свойством AutoSize. Если это свойство установлено в true, то вертикальный и горизонтальный размеры компонента определяются размером надписи. Если же AutoSize равно false, то выравнивание текста внутри компонента определяется свойством Alignment, которое позволяет выравнивать текст по левому краю, правому краю или центру клиентской области метки.

В метке Label имеется свойство Wordwrap — допустимость переноса слов длинной надписи, превышающей длину компонента, на новую строчку. Чтобы такой перенос мог осуществляться, надо установить свойство WordWrap в true, свойство AutoSize в false (чтобы размер компонента не определялся размером надписи) и сделать высоту компонента такой, чтобы в нем могло поместиться несколько строк.

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

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

RadioGroup – это панель, которая может содержать регулярно расположенные столбцами и строками радиокнопки. Надпись в левом верхнем углу панели определяется свойством Caption. А надписи кнопок и их количество определяются свойством Items, имеющим тип TStrings. Щелкнув на кнопке с многоточием около этого свойства в окне Инспектора Объектов, вы попадете в редактор списков строк. В нем вы можете занести надписи, которые хотите видеть около кнопок, по одной в строке. Сколько строчек вы запишете — столько и будет кнопок.

Кнопки, появившиеся в панели после задания значений Items, можно разместить в несколько столбцов (не более 17), задав свойство Columns. По умолчанию Columns = 1, т.е. кнопки размещаются друг под другом.

Определить, какую из кнопок выбрал пользователь, можно по свойству ItemIndex, которое показывает индекс выбранной кнопки. Индексы, как всегда в Delphi, начинаются с 0. По умолчанию ItemIndex = -1, что означает отсутствие выбранной кнопки. Если вы хотите, чтобы в момент начала выполнения приложения какая-то из кнопок была выбрана (это практически всегда необходимо), то надо установить соответствующее значение ItemIndex во время проектирования. Если вы используете радиокнопки не для ввода, а для отображения данных, устанавливать значение ItemIndex можно программно во время выполнения приложения.

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

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

Свойства Alignment и WordWrap имеют тот же смысл, что, например, в метках, и определяют выравнивание текста и допустимость переноса длинных строк. Установка свойства ReadOnly в true задает текст только для чтения. Свойство MaxLength определяет максимальную длину вводимого текста. Если MaxLength = 0, то длина текста не ограничена. Свойства WantReturns и WantTab определяют допустимость ввода пользователем в текст символов перевода строки и табуляции.

Свойство ScrollBars определяет наличие полос прокрутка текста в окне. По умолчанию ScrollBars = ssNone, что означает их отсутствие. Пользователь может в этом случае перемещаться по тексту только с помощью курсора. Можно задать свойству ScrollBars значения ssHorizontal, ssVertical или ssBoth, что будет соответственно означать наличие горизонтальной, вертикальной или обеих полос прокрутки.

Свойства TabCount и Tab имеют смысл при вводе текста только при значении свойства компонента WantTabs = true. Это свойство разрешает пользователю вводить в текст символ табуляции. Если WantTabs = false, то нажатие пользователем клавиши табуляции просто переключит фокус на очередной компонент и символ табуляции в текст не введется.

Основное свойство окна memo – Lines, содержащее текст окна в виде списка строк и имеющее тип TStrings. Начальное значение текста можно установить в процессе проектирования, нажав кнопку с многоточием около свойства Lines в окне Инспектора Объектов. Перед вами откроется окно редактирования списков строк. Вы можете редактировать или вводить текст непосредственно в этом окне, или нажать кнопку CodeEditor и работать в обычном окне Редактора Кода. В этом случае, завершив работу с текстом, выберите из контекстного меню, всплывающего при щелчке правой кнопкой мыши, команду Close Page и ответьте утвердительно на вопрос, хотите ли вы сохранить текст в соответствующем свойстве окна редактирования.

Во время выполнения приложения вы можете заносить текст в окно редактирования с помощью методов свойства Lines типа TStrings. Этот тип широко используется в свойствах многих компонентов и его описание вы можете найти в во встроенной справке Delphi. Здесь коротко укажем только на его основные свойства и методы, используемые в свойстве Lines.

Весь текст, представленный одной строкой типа String, внутри которой используются разделители типа символов возврата каретки и перевода строки, содержится в свойстве Text.

Доступ к отдельной строке текста вы можете получить с помощью свойства Strings[Index: Integer]. Индексы, как и везде в Delphi, начинаются с 0. Так что Memo1.Lines.Strings[0] — это текст первой строки. Учтите, что если окно редактирования изменяется в размерах при работе с приложением и свойство WordWrap = true, то индексы строк будут изменяться при переносах строк, так что в этих случаях индекс мало о чем говорит.

Свойство только для чтения Count указывает число строк в тексте.

Для очистки текста в окне надо выполнить процедуру Clear. Этот метод относится к самому окну, а не к его свойству Lines.

Для занесения новой строки в конец текста окна редактирования можно воспользоваться методами Add или Append свойства Lines. Для загрузки текста из файла применяется метод LoadFromFile. Сохранение текста в фале осуществляется методом SaveToFile.

Пусть, например, в вашем приложении имеется окно редактирования Edit1, в котором пользователь вводит имя сотрудника, и есть кнопка, при щелчке на которой в окно Memo1 должна занестись шапка характеристики этого сотрудника, после чего пользователь может заполнить текст характеристики.

Обработчик щелчка на кнопке может иметь вид:

Memo1.Lines.Add ('Х А Р А К Т Е Р И С Т И К А');

Загрузка в окно Memo1 текста из файла (например, хранящейся в файле характеристики сотрудника) может осуществляться командой

Сохранение текста в файле может осуществляться командой

1.2.Новые методы решения

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

1.3.Этапы разработки программы

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

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

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

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

Глава 2.Разработка программы 2.1.Постановка задачи

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

2.2.Язык программирования Delphi

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

В процессе построения приложения необходимо выбирать из палитры компоненты, на основе которых будет строиться проект. Еще до компиляции видно результаты своей работы. В этом смысле проектирование в Delphi мало чем отличается от проектирования в интерпретирующей среде, однако после выполнения компиляции получаем код, который исполняется в 10-20 раз быстрее, чем то же, самое, сделанное при помощи интерпретатора. Cреда Delphi включает в себя полный набор визуальных инструментов для скоростной разработки приложений (RAD - rapid application development), поддерживающей разработку пользовательского интерфейса.

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


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

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


При нажатии кнопки “Далее >>>” на форме отобразится вопрос и три варианта ответа, выбор варианта ответа производится кликом мыши. Продолжение тестирования производится кнопкой “Далее >>>” при этом на форме будут отображаться новые вопросы и три варианта ответа.

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

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

Организационная структура реализации алгоритма разработки программы схематически изображена на рисунке 1.

2.5.Минимальный состав оборудования

Процессор – не ниже Pentium 166;

Операционная система – Windows 95, 98, 2000, XP;

Оперативная память – 16 Мб;

Минимальное требуемое место на жестком диске – 5 Мб.

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

Бобровский С. Delphi 5 – М.: Питер, 2002.

Гаевский А.Разработка программных приложений на Delphi 6 – М.: Киев, 2000.

Епанишников А. М., Епанишников В. А. Программирование в среде Turbo Pascal 7.0. М.: Диалог МИФИ, 1998.

Зуев В. А.. Turbo Pascal 6.0, 7.0. М.: Веста; Радио и связь, 1998.

Моисеев А. Object Pascal – М.: Москва, 2000.

Немнюгин С.А. Программирование – М.: Питер, 2000.

Программирование под ред. В.В.Старлова – М: Питер, 1999

Ремизов Н. Delphi – М.: Питер, 2000.

Сван Т. Основы программирования в среде для Windows 95. Киев, 1996.

Справочная система Delphi 5.0 Help.

Т.А. Ильина. Программирование на Delphi 6 – М.: Питер, 2000.

Фаронов В. В. Delphi 4. Учебный курс. М.: Нолидж, 1999.

Хендерсон К. Руководство разработчика баз данных в Delphi 2. Киев: Диалектика, 1998.

Ч. Куписевич. Программирования на Delphi. – М: Киев, 1986

Шапошников И. Delphi 5 – М.: Санкт-Петербург, 2001.

Шумаков П. В. Delphi 3 и разработка приложений М.: Нолидж, 1999.

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

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


Вид формы приложения с компонентами

Алгоритм выполнения работы

3. Разместите на форме Form1 компоненты Edit1, Edit2 и Label1, Label2.

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

Компонент RadioGroup позволяет отображать и редактировать поля с ограниченным множеством возможных значений.

Разместите на форме Form1 компонент RadioGroup1 из палитры Standard.

Щелкнув мышью на кнопке ОК, завершите формирование списка арифметических операций.

6. В окне Инспектора объектов задайте для свойства RadioGroup. Items Index значение 0, чтобы сделать первую кнопку (сложение) выбранной по умолчанию.

Определить во время выполнения, какая кнопка выбрана в данный момент, можно по индексу ItemIndex (0 означает первую кнопку, -1 — ни одна кнопка не выбрана).


Рис. 31. Редактирование списка элементов в панели RadioGroup

7. Задайте размер символов компонента RadioGroup, установив для свойства RadioGroup.Font.Size значение 11 пунктов.

10. Удалите текст Edit1, Edit2, Edit3 в соответствующих компонентах. Для этого выберите объект в окне Инспекто-ра объектов, на странице Properties выберите свойство Text и удалите текст.

11. Выровняйте компоненты Edit3 и Label3, отцентрировав их по горизонтали.

12. Зафиксируйте положение компонентов на форме, выбрав в меню Delphi команду Правка ► Зафиксировать. Форма будет выглядеть, как показано на рис. 32.


Рис. 32. Вид формы приложения с компонентами

procedure TForm1.Button1CIick(Sender: TObject);

Begin

end;

Для решения задачи вычисления арифметических операций над двумя целыми операндами введите в текст процедуры TForm1.Button1Click следующее описание:

Var

a, b: integer;

с: real;


Рис. 33. Копирование примера кода программы в окне Delphi Help

В окне Редактора кода укажите место вставки скопированного фрагмента в основном теле процедуры обработки события и, вызвав контекстное меню, выберите команду Paste (Вставить). В основном теле процедуры обработки события отредактируйте текст оператора case и введите текст остальных операторов следующим образом:

Begin

a:= StrToInt( Edit1. text);

b:= StrToInt( Edit2. text);

Edit3. text:='';

Case RadioGroup1.ItemIndex of

0 : c:=a+b;

1 : c:=a-b;

2 : c:=a*b;

3 : if b=0 then ShowMessage('На ноль делить нельзя!')

else c:=a/b; end;

if RadioGroup1.ItemIndex<> 3 then

Edit3.text:= FloatToStrF(c,ffGeneral,10,7)

результата вещественного деления в текстовую строку>

else if b<>0 then

Edit3.text:=FloatToStrF(c,ffGeneral,10,4)

end;

14. Откомпилируйте и запустите приложение на выполнение.


Дополнительное задание 1.


Поместите перед оператором присваивания a:= StrToInt( Edit1. text); строку

if (Edit1.Text<>") and (Edit2.Text<>") then begin

которая проверяет значения свойств Edit1.Text и Edit2.Text.

Если эти значения не пустые, то выполняется вычисление арифметической операции, в противном случае управление передается на следующий фрагмент программы, который нужно вставить перед последним оператором end;

End;

© 2014-2022 — Студопедия.Нет — Информационный студенческий ресурс. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав (0.007)

Читайте также: