Представление информации может осуществляться с помощью языков, которые являются знаковыми системами. Каждая знаковая система строится на основе определенного алфавита и правил выполнения операций над ними.
Алфавит языка PASCAL
Текст PASCAL-программы представляет собой последовательность строк, состоящих из символов, образующих алфавит языка.
Максимальная длина строки — 126 символов.
Лексическая структура языка
Символы из алфавита языка используются для построения базовых элементов PASCAL-программ — лексем.
Лексема — минимальная единица языка, имеющая самостоятельный смысл.
Зарезервированные (служебные) слова:
absolute | div | goto | nil | repeat | var |
and | do | if | not | set | virtual |
array | downto | implementation | object | shl | while |
asm | else | in | of | shr | with |
assembler | end | inline | ot | string | xor |
begin | external | interface | packed | then | |
case | file | private | to | ||
const | for | interrupt | procedure | type | |
constructor | forward | label | program | unit | |
destructor | function | mod | record | uses |
Общая структура программ | Информатика Паскаль #7 | Знанио
2. Идентификаторы (имена)
Идентификаторы – это имена, которые состоят из латинских букв, цифр и символа подчеркивания и начинаются только с буквы или символа подчеркивания.
X | _Beta | программа |
Y22M | 5ABC | Figure/Fer |
RAZMER | Pascal_Basic | INd67 |
index | _123 | Const |
Gamma | Y.22 | ABCD_1234_EFG |
Alfa_Beta | CH Gamma | Dos.Exec |
3. Знаки операций
Формируются из одного или нескольких специальных символов и предназначены для задания действий по преобразованию данных и вычислений.
Условное обозначение операции | Наименование операции |
+ | сложение |
— | вычитание |
* | умножение |
/ | деление |
div | деление целочисленное |
mod | остаток от целочисленного деления |
:= | присвоение |
= | равно (сравнение) |
<> | не равно (сравнение) |
меньше (сравнение) | |
> | больше (сравнение) |
меньше или равно (сравнение) | |
>= | больше или равно (сравнение) |
not | логическое НЕ |
and | логическое И |
or | логическое ИЛИ |
xor | исключительное ИЛИ |
Основы программирования: структура программ
Формируются из специальных символов и в основном используются для повышения наглядности текстов программ. Например: “(“,”)”, “”, “;”, пробел “ ”.
Группа лексем обозначает числа, символьные строки и некоторые другие значения.
Источник: infopedia.su
Структура программы
Алфавитом языка называют присущий данному языку набор символов или «букв», из которых формируются все конструкции языка.
При использовании любого языка (в том числе и языка программирования) необходимо следить за тем, чтобы все произносимое или написанное было корректно с точки зрения алфавитных конструкций (т.е. синтаксически) и имело определенный смысл (т.е. обладало семантикой).
При разговоре на иностранном языке человек может допускать грамматические ошибки, но если его речь осмыслена, его поймут. При программировании на алгоритмических языках любое предложение в первую очередь должно быть корректно синтаксически, только тогда может идти речь о его семантике.
Переводом программы с языка, на котором она написана, на машинный и анализом ее синтаксиса занимается программа – компилятор. Иногда компилятор называют более общим термином – транслятор.
В программах предусмотрено использовании комментариев, т.е. пояснительного текста, оформленного определенным образом и никак не влияющего на ход выполнения программы.
В языке программирования С комментарии обозначаются символами /* */:
Идентификаторы, или имена, используются для обозначения (идентификации) всех объектов, вводимых в программу. Под объектами понимаются переменные, константы, типы, подпрограммы и т.д. Идентификатор – последовательность из букв латинского алфавита, десятичных цифр и символов подчеркивания, начинающаяся не с цифры. Прописные и строчные буквы различаются.
Ключевые (служебные, зарезервированные) слова имеют однозначно определенный смысл и могут использоваться только так, как это задано в языке. Ключевые слова не могут быть переопределены, т.е. их нельзя использовать в качестве имен, вводимых программистом.
Краткий список ключевых слов:
asm | double | new | switch |
auto | else | operator | template |
break | enum | private | This |
case | extern | protected | Throw |
catch | float | public | Try |
char | for | register | typedef |
class | friend | return | typeid |
const | goto | short | union |
continue | if | signed | unsigned |
default | inline | sizeof | virtual |
delete | int | static | void |
do | long | struct | volatile |
while |
В языке С++ был зарезервирован дополнительный набор слов.
Таким образом, алфавит языка С включает:
· Прописные латинские буквы A … Z;
· Строчные латинские буквы a … z;
· Арабские цифры 0 … 9;
· Разделители (знаки пунктуации, различные скобки и иные специальные символы)
· Пробельные символы:SP, H_TAB, CR, LF, V_TAB, FF, Ctrl-Z (конец текстового файла);
· Специальные символы, необходимые для представления символов, не имеющих графического обозначения, а также пробельных символов.
Наиболее употребимы следующие специальные символы:
n – новая строка;
t – горизонтальная табуляция;
r – возврат каретки;
f – новая страница;
a – звуковой сигнал;
Компилятор С(С++) воспринимает одну и ту же строчную и заглавную буквы как разные символы – различает регистр букв.
Структура программы.
Напишем нашу первую программу, выводящую на экран текстовую строку – не будем нарушать традиции.
Void main(void)
Теперь строчка за строчкой разберем, что же здесь написано.
Директива # include подключает заголовочный файл (файл, в котором содержится «заготовка» функции, то есть уже заранее прописанный её заголовок), в данном случае , содержащий средства поддержки стандартного ввода-вывода;
void main(void) – имя основной программы, оно всегда присутствует и всегда одинаково;
void перед именем программы служит признаком того, что программа не возвращает конкретного значения.
– скобки, ограничивающие тело программы;
printf () – функция вывода данных, находящихся в круглых скобках.
Каждый оператор завершается точкой с запятой, которая является атрибутом оператор, указывающим на его конец.
Заголовочные файлы содержат так называемые прототипы функций. Прототип сообщает компилятору информацию о синтаксисе функции. Если раскрыть заголовочный файл любым текстовым редактором, то можно обнаружить в нем строку, описывающую прототип подключаемой функции. На данном этапе нет необходимости вникать в подробности описания прототипа каждой функции, следует лишь помнить о том, что заголовочные файлы вводят в программы некоторые предварительно объявленные элементы.
Рассмотрим С-программу, содержащую элементы вычислений.
Void main(void)
a=5;
b=10;
c=a+b;
printf (“Значение с=%dn”,c);
Общая структура программы не изменилась, но добавились некоторые моменты:
int a, b, c – объявление трех целочисленных переменных a, b и c;
int – признак того, что переменные имеют целый тип.
Общим правилом при программировании на языке С (как, впрочем, и на большинстве других языков) является то, что прежде чем использовать в программе какую-либо переменную, ее необходимо объявить с указанием типа.
a=5; b=10; — присваивание значений переменным a и b. Объявление переменной приводит к тому, что для нее отводится место в памяти согласно объявленному типу. Значения же переменным следует присваивать в явном виде.
c=a+b; — сложение значения а со значением b и присвоение полученного результата переменной с.
Базовые типы
Программа может работать только с определенными типами данных. Основные типы данных приведены в таблице.
Тип данных | Объем занимаемой памяти, байт | Минимально допустимое значение | Максимально допустимое значение | Комментарий |
signed char | -128 | Знаковое символьное | ||
unsigned char | Беззнаковое символьное | |||
signed short | -32 768 | 32 767 | Знаковое и беззнаковое короткое целое | |
unsigned short | 65 535 | |||
signed int | -32 768 | 32 767 | Знаковое и беззнаковое целое, размер зависит от компилятора | |
unsigned int | 65 535 | |||
signed long | -2 147 483 648 | 2 147 483 647 | Знаковое и беззнаковое длинное целое | |
unsigned long | 4 294 967 295 | |||
float | 3.4E-38 | 3.4E+38 | Различные представления для действительных чисел | |
double | 1.7E-308 | 1.7E+308 | ||
long double | 3.4E-4932 | 3.4E+4932 |
Все целые типы являются знаковыми по умолчанию, но можно объявить их как беззнаковые, которые, занимая тот же объем памяти, что и их знаковые аналоги, представляют только положительные значения, включая нуль. Вследствие этого они могут представлять вдвое больше положительных значений.
Если в процессе каких-либо арифметических действий, например при сложении, результат превосходит максимально допустимое значение для объявленного типа (т. е. при переполнении), значения целочисленных переменных обнуляются.
Логического типа как такового в языке С нет, но целые значения могут представлять истинные и ложные значения в выражениях, трактуемых как логические, причем нулевое значение означает ложь, а ненулевое – истину.
Типы данных с плавающей точкой (вещественные) могут иметь форму записи с десятичной точкой или экспоненциальную форму:
double d1=2.35;
double d2=2.0E-5;
Символьные типы хранят отдельные символы в кодах ASCII.
4. Основные операторы.
При построении выражений используются следующие типы операций:
- Арифметические
- Отношений
- Логические и поразрядные
- Инкремента и декремента
- Присваивания
Арифметические операторы:
% — деление по модулю.
Все перечисленные операции здесь выполняются традиционным образом, кроме операции деления. Особенность операции деления заключается в том, что она дает целый результат, если оба операнда целые. Чтобы получить действительный результат, необходимо иметь хотя бы один действительный операнд. Так, 9/5 даст 1, а 9/5.0 даст 1.8, а 9%5 равно 4.
Необходимо помнить, что все операции в языках программирования следует указывать в явном виде. В большей степени это относится к операции умножения, которую в математике можно опустить, а при программировании – нельзя.
Операторы отношений:
>= — больше или равно;
В языка программирования, как и в математике, используются для сравнения.
Оператор присваивания:
Переменная = выражение;
интерпретируется как «присвоить Переменной значение Выражения», а выполняется следующим образом: вычисляется значение Выражения, стоящего справа от знака присваивания (=), и полученный результат становится значением, которое принимает переменная, стоящая слева от знака присваивания: а=5+2;
Необходимо помнить о том, что знак «=» — это знак присваивания, а не знак равенства. Присваивание является выражением, так как имеет значение, равное присваиваемому результату.
В языке С допустима запись i=j=k=5; — сквозное присваивание одного значение нескольким переменным. Такая форма записи удобна, например, при инициализации нескольких переменных одним значением.
Логические операции:
Ввод и вывод.
Вывод результатов программы, как было рассмотрено ранее, осуществляется с помощью оператора printf (),ранее был рассмотрен самый простой вид этой команды. Однако, у этого оператора есть несколько форматов записи, применяемых в различных случаях, например для вывода целых чисел, вывода действительных чисел и т.д.
Проиллюстрируем эти форматы примерами.
Printf(“Здравствуй, мир!n”) – вывод текстовой строки с переводом курсора на новую строку.
Printf(“Значение с=%dn”, с) – функция вывода имеет некоторую особенность, а именно конструкцию %d, называемую спецификацией преобразования. На ее место будет поставлено значение переменной с, причем % указывает место, а d – тип (целый) подставляемого значения. Пусть с=15, строка, распечатываемая оператором printf, будет иметь вид: Значение с=15.
Printf(“Значение с=%d, f=%fn”, с, f) – функция для вывода текстовой строки и значений двух переменных c и f, где с имеет тип int, а f – одного из действительных типов.
В общем случае возможны форматы для вывода переменных:
d – аргумент преобразуется в десятичное представление;
o – аргумент преобразуется в восьмеричное представление;
x – аргумент преобразуется в шестнадцатеричное представление;
c – значением аргумента является символ;
s – значением аргумента является строка символов;
e – значением аргумента является величина типа float или double в формате с плавающей точкой;
f – значением аргумента является величина типа float или double в формате с фиксированной точкой;
g – один из форматов e или f;
u – значением аргумента является целое беззнаковое число;
p – значением аргумента является указатель (адрес).
Вместо (или вместе) n наиболее часто используются следующие управляющие символы:
n – перевод строки;
a – кратковременный звуковой сигнал;
t – горизонтальная табуляция;
b – возврат курсора на один шаг назад;
r – возврат каретки.
Очень часто программа должна осуществлять не только вычисления и вывод результатов, но и ввод данных, для этого используется оператор scanf (), использование которого во многом похоже на использование оператора printf (): scanf (“%f,%d ”, b) – способ организовать ввод двух переменных a — действительного типа и b – целого, перед именем переменной ставится значок
scanf(“%f, %f”, q);
m=p/q;
printf(“ m= %f / %f = %fn”, p, q, m);
Таблица основных математических функций
Наименование функции | Обозначение функции | Тип | ||
Возвращаемого значения функции | аргумента | Имя файла описания | ||
Абсолютное значение | abs(x) cabs(x) fabs(x) | int double float | int double float | |
Арккосинус | acos(x) | double | double | |
Арксинус | asin(x) | double | double | |
Арктангенс | atan(x) | double | double | |
Косинус | cos(x) | double | double | |
Синус | sin(x) | double | double | |
Экспонента e x | exp(x) | double | double | |
Степенная функция x y | pow(x,y) | double | double | |
Логарифм натуральный | log(x) | double | double | |
Логарифм десятичный | log10(x) | double | double | |
Корень квадратный | sqrt(x) | double | double | |
тангенс | tan(x) | double | double |
Использованная литература:
Ашарина, И.В. Основы программирования на языках С и С++ / И.В. Ашарина – М.: Горячая линия-Телеком, –2002. – 207 с.
Воспользуйтесь поиском по сайту:
studopedia.org — Студопедия.Орг — 2014-2023 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.013 с) .
Источник: studopedia.org
Общая структура программы
При создании программного кода на языке Cache Object Script известно в общей сложности четыре различных типа программ, обзор которых дает следующая таблица.
Таблица 1. Различные типы программ.
Окончание | Тип программы | Пояснение |
.MAC | Макрокод | Макрокод может содержать код Cache ObjectScript, макродирективы, макросы, встроенный SQL и встроенный HTML. Он компилируется в промежуточный код, а тот уже в объектный код. |
.INC | Включаемая макропро-грамма | Включаемые макропрограммы могут содержать любой код, разрешенный в.МАС-программах. Они применяются для построения макробиблиотек и могут быть включены в макропрограмму с помощью директивы Include -отсюда и их название. |
.INT | Промежу-точный код | Промежуточный код — это рабочий код Cache ObjectScript. Макросы и встроенный SQL сначала преобразуются в промежуточный код. |
.OBJ | Объектный код | Прежде чем выполнить промежуточный код, необходимо откомпилировать его во внутренний объектный код. Это происходит автоматически при сохранении отредактированной программы. Во время выполнения используется только объектный код; Фирмы-разработчики программного обеспечения тиражируют свои приложения, большей частью, только в объектном коде. |
Создание программ с помощью Cache Studio
Cache Studio — это одно из приложений, вызываемых из меню Cache-куба. Для разработки программ предлагается графический редактор, позволяющий комфортно создавать классы (включая создание кода методов), CSP-страницы Cache (Cache Server Pages), программы на макроязыке, включаемые файлы и программы на промежуточном коде, а также компилировать их в выполняемый объектный код.
Cache Studio предоставляет программисту такое вспомогательное средство, как автоматический синтаксический контроль; различные элементы языка помечаются разным цветом и в случае нарушения синтаксических правил выводятся сообщения об ошибках.
Cache Studio также содержит встроенный отладчик, который может быть использован для поиска ошибок в приложениях.
Программисты часто используют Cache Studio совместно с проводником Cache, который предоставляет богатейшие возможности по управлению программами, включая их импорт/экспорт, а также контекстный поиск.
Основные структуры в программе
Программы в Cache состоят из индивидуальных блоков кода, создаваемых и редактируемых как исходный код, при сохранении автоматически компилируемых в особую объектную форму, не являющуюся машинным кодом и независимую от платформы — это так называемый р-код.
В качестве имени программы допустима любая комбинация буквенно-цифровых символов 7-битного набора ASCII, с тем лишь ограничением, что имя не должно начинаться с цифры, и с тем дополнением, что первым символом может быть знак процента, а также в любой позиции имени кроме первой и последней может использоваться символ точки. Программы, имена которых начинаются с процента, считаются библиотечными программами, эти имена предусмотрены для системных программ Cache, которые могут вызываться из любых областей Cache. В отношении максимальной длины имени каких-либо ограничений нет, однако распознаются лишь символы с первого по 31.
Строение программной строки
Строка является основной структурной единицей программы. Вообще говоря, в Cache различают четыре вида программных строк:
Строки с метками
Метка отмечает строку внутри программы. Она всегда должна начинаться в первом столбце строки. Соглашения для меток соответствуют соглашениям для имен программ, кроме того, метку можно начинать с цифры. Общая длина не должна превосходить 31 символ. Вслед за меткой в любом случае идет пробел, называемый также признак начала строки.
За ним могут (но не обязаны) следовать выполняемые команды Cache.
Строки кода
Они всегда начинаются, по меньшей мере, одним пробелом (то есть признаком начала строки). За ним могут (но не обязаны) следовать выполняемые команды Cache.
Строки комментария
Имеются два различных метода комментирования:
— Комментарий с точкой с запятой (;). Все символы, идущие за точкой с запятой, не выполняются. При компиляции программы в объектный код комментарии удаляются.
— Комментарий с двумя точками с запятой (;;). Некоторые элементы языка (в особенности функция $Text) могут ссылаться на текст программной строки.
Часто комментарии служат для хранения параметров или констант в тексте программы. Чтобы это было возможно и в случае отсутствия исходного кода программы во время выполнения, отделенные двумя точками с запятой комментарии из объектного кода не удаляются, другими словами, при компиляции в отличие от простой точки с запятой они сохраняются.
С-совместимые комментарии
— Два слэша (//), аналогично точке с запятой.
— Комментарий, расположенный на нескольких строках программы начинается с символов /* и заканчивается */.
Между последней командой в строке и началом комментария /* должен присутствовать минимум один пробел (два пробела для команды без аргументов). Эта форма комментария может быть также использована внутри списка аргументов функции, например:
Write $Char(65 /* 65 соответствует букве «А» */)
Пустые строки применяются для визуального деления программы и ее лучшей читаемости. Первая строка программы не может быть пустой строкой.
Выражение или команда могут быть расположены в нескольких строках. Очевидно, действует правило, что команда не может быть разделена на командное слово и первый символ аргумента команды.
Set sum = x + у // comment I
+ z, // comment 2
mue = sum /3 // comment 3
В этом примере комментарии расположены в конце каждой «подстроки».
В дополнение к этому надо учитывать, что строка всегда рассматривается как единое целое в строчных формах команд For, If и Else и поэтому не может быть разбита на несколько.
Максимальная длина строки программы 4К.
Блоки в программе
Следующую по размеру структурную единицу представляют собой блоки.
В Cache различают три типа блоков:
1. «Точечные» блоки, вызываемые при помощи команды Do без аргументов.
2. Процедурные блоки, которые заключены в фигурные скобки и поэтому могут располагаться на нескольких строках.
3. Командные конструкции условного выполнения программы, в которых исполняемый программный код также заключен в фигурные скобки.
«Точечные» блоки
«Точечные» блоки начинаются одной или несколькими точками в каждой строке, поэтому они так и называются. Вызывают их с помощью безаргументной команды Do.
Точечные блоки расширяют область действия программной строки. Инициализация такого блока происходит посредством команды Do без аргумента, при этом ожидается, что этот блок начинается в следующей строке после Do. Эта область должна начинаться с точки (после признака начала строки). При этом аналогично команде Do с аргументом Do-стек увеличивается на единицу (уровень 1). Если в этой области встречается еще одна безаргументная команда DO, следующая строка должна начинаться с двух точек (уровень 2) и так далее.
Отдельные блоки не обязаны, но могут завершаться командой Quit. Они заканчиваются неявно, если вслед за блоком с n-ным количеством точек идет строка, в начале которой содержится отличное от n число точек.
Заметим, что из заданного уровня с помощью команды Goto или Do невозможно перейти на другой уровень, однако из блока локально или глобально могут вызываться программы, в нем не находящиеся.
В следующем примере поясняются основные структуры блоков.
// Эта (основная) область относится к уровню 0,
// который не содержит точек
Do // безаргументная Do
. // Внешний блок, одна точка, уровень 1
. Do // еще безаргументная Do
.. // внутренний блок, две точки, уровень 2
. // вновь блок первого уровня —
. // неявное завершение 2-го уровня блока
// Отсутствие точки, основной блок
В заключение необходимо сделать еще два важных замечания.
Во-первых, каждый уровень блока имеет собственную служебную переменную $Test, другими словами, изменение $Test не передается наружу. (Это существенное отличие от вызова подпрограммы с помощью команды Do с аргументом!).
Во-вторых, как это происходит в нашей программе-примере, точки должны проставляться и у строк комментария с тем, чтобы блок не завершился автоматически.
Общая структура программы
Программа в Caché состоит из индивидуальных блоков, создаваемых и редактируемых как исходный код. Программа состоит из подпрограмм, процедур и функций.
Имя программы – определяется именем MAC-файла, в котором она хранится, это любая комбинация буквенно-цифровых символов ASCII, имя не должно начинаться с цифры. При сохранении программы в файле ее имя не должно содержать символы: _(подчерк), — (минус),; (точка с запятой).
Имя, включающее эти символы, не является верным.
Вызов программы:
Do ^RoutineName
Первой строкой программы может быть оператор с меткой (тегом), метка может сопровождаться списком входных параметров, заключенных в круглые скобки.
Программа – это контейнер для подпрограмм, методов, процедур и функций. Программы, имена которых начинаются с %(процента), считаются библиотечными программами.
Программы в Cache состоят из входной метки, отдельных программных строк, содержащих код, и заключительной команды Quit. Эта структура внутри программы может повторяться.
Строение программной строки:
[метка] [код команды] [комментарий]
В программах в основном используются процедурные блоки, которые заключены в фигурные скобки и поэтому могут располагаться на нескольких строках, а также командные конструкции условного выполнения программы, в которых исполняемый программный код также заключен в фигурные скобки.
Р1 // первая строка программы
Р2 // первая строка подпрограммы Р2
Эта программа состоит из двух фрагментов, программы Р1 и вызываемой из Р1 программы Р2. Из совершенно другой программы можно было бы «глобально» вызвать Р1 с помощью команды Do ^P1. Это означает, что программа будет загружена из каталога программ в память и далее последует ее выполнение.
Если циркумфлекс («знак глобала») при вызове Do P2 отсутствует, то ожидается, что метку следует искать в текущей программе. Р2 можно назвать также подпрограммой Р1.
Вход в «глобально» вызываемую программу может совершаться и с определенной метки. К примеру, вызов Do P2^P1 вызывал бы (локальную) подпрограмму Р2 в программе Р1.
Наконец, имеется возможность, используя так называемый синтаксис метка+смещение, войти в n-ную строку (n равно смещению) после метки в вызываемой программе. Так, например, в нашей программе вызов Do Р1+3^Р1 означал бы, что вход в программу совершается через вторую строку после метки Р1, и там начинается обработка. В этом случае строка Set a=1 была бы пропущена. Эта возможность весьма гибка, и применяется в самых разных ситуациях (например, при тестировании программ), но все же требуется соблюдать достаточную осторожность, особенно тогда, когда в программу будут добавляться строки, и таким образом смещение будет изменяться.
Не касаясь заранее передачи значений вызываемой программе, хотелось бы подчеркнуть, что метки можно снабдить заключенным в скобки списком переменных, служащих формальными параметрами подпрограммы, которая будет вызвана с этой метки.
Invert(xl,x2,x3) // Метка со списком формальных параметров
Метки могут быть public (общедоступными) и private (внутренними), что определяется соответствующим ключевым словом. Если его нет, то по умолчанию они public.
Метки public могут быть вызваны из любой программы, private — только из текущей.
Move(x) Private /* метка private, может быть использована
только внутри этой программы */
Rotate(x) Public /* это метка public, может быть вызвана из
любой программы */
Invert(х) /* аналогично */
Прежде чем закончить рассмотрение меток, давайте остановимся на неявной команде Quit перед меткой с параметрами.
Write «Hello World»,!
// Здесь неявная команда Quit
// Здесь неявная команда Quit
Write «This is my procedure»
// Неявная команда Quit в конце процедуры
Неявная команда Quit предотвращает «сквозное продолжение» программы в том случае, если опущена явная команда Quit и следующая строка начинается с метки с параметрами. Это обусловлено тем, что параметры могут быть не определены.
В случае ошибки выполнения программы выдается имя метки+ смещение, где произошла ошибка.
SAMPLES>do ^badroutine
SAMPLES 2do>quit
Строка программы может иметь метку в начале, называемую тегом, код команды и комментарий, но все эти элементы являются необязательными. Все эти элементы отделяются друг от друга табуляцией или пробелами.
end quit; конец
ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры.
Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычислить, когда этот.
Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право.
Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:
Источник: zdamsam.ru