| Язык | Схемы вложенных циклов типа для |
| Школьный АЯ | нц для
i от A1 до B1
тело внешнего цикла . . . . . . нц для j от A2 до B2 тело внутреннего цикла . . . . . . кц . . . . . . кц |
| Pascal | For
i := A1 to B1 do
begin . . . . . . For j := A2 to B2 do begin . . . . . . end; . . . . . . end; |
| Basic | FOR I = A1 TO
B1 STEP H1
. . . . . . FOR J = A2 TO B2 STEP H2 . . . . . . NEXT J . . . . . . NEXT I |

|
|
|
|
|
|
|
|
Школьный АЯ
алг Суммы столбцов (арг цел N, M, арг вещ таб A[1:N, 1:M], рез вещ таб S[1:M]) дано | N>0, M>0 нач цел i, j нц для j от 1 до M | цикл по столбцам S[j]:=0 нц для i от 1 до N | цикл по элементам S[j]:=S[j] + A[i, j] |текущего столбца кц кц конИсполнение алгоритма
|
![]() |
Program SumColumn;
Uses Crt;
Var A : Array [1..10, 1..10] of Real;
N, M, i, j : Integer;
S : Array [1..10] of Real;
{--------------------------------------------}
Procedure InputOutput;
Begin {описание процедуры ввода-вывода исходных данных}
ClrScr;
Write('Количество строк - '); ReadLn(N);
Write('Количество столбцов - '); ReadLn(M);
For i := 1 to N do {Ввод элементов матрицы}
For j := 1 to M do
begin Write('A[' , i , ', ' , j , ']= ? '); {вывод запроса}
ReadLn(A[i, j]) {ввод значения}
end; WriteLn;
ClrScr;
WriteLn(' Матрица А');
For i := 1 to N do {Вывод матрицы по строкам}
begin
For j := 1 to M do Write(A[i, j] : 5 : 1); {вывод i-ой строки}
WriteLn {перенос курсора на начало следующей строки}
end; WriteLn
End; { of InputOutput }
{--------------------------------------------}
Procedure SumCol;
Begin {описание процедуры вычисления сумм элементов столбцов}
For j := 1 to M do {цикл по столбцам матрицы}
begin
S[j] := 0; {обнуление суммы элементов j-го столбца}
For i := 1 to n do S[j] := S[j] + A[i, j] {накопление суммы}
end;
End; { of SumCol }
{--------------------------------------------}
Procedure OutResult; {описание процедуры вывода результатов}
Begin
Write( 'О т в е т : Суммы элементов столбцов равны ');
For j := 1 to M do Write(S[j] : 5 : 1); WriteLn; ReadLn
End; { of OutResult }
{--------------------------------------------}
BEGIN
InputOutput; {вызов процедуры ввода-вывода исходных данных }
SumCol; {вызов процедуры вычисления сумм }
OutResult; {вызов процедуры вывода результатов}
END.
CLS
INPUT "Количество строк - ", N
INPUT "Количество столбцов - ", M
DIM A(N, M), S(M) 'Резервирование памяти для матрицы A и вектора S
FOR i = 1 TO N 'Ввод матрицы
FOR j = 1 TO M
PRINT "A(" ; i ; ", " ; j ; ") = ";
INPUT A(i, j)
NEXT j
NEXT i
FOR j = 1 TO M 'Вычисление сумм элементов столбцов S(j) = 0 FOR i = 1 TO N S(j) = S(j) + A(i, j) NEXT i NEXT j
PRINT "О т в е т : Суммы элементов столбцов равны "; FOR j = 1 TO M PRINT S(j); NEXT j : PRINT END
|
|
|
|
|
|
|
|
алг Количество максимумов(арг цел N,M, арг цел таб А[1:N,1:M], рез цел K) нач цел i, j, Amax Amax := A[1, 1] | Поиск максимального элемента матрицы нц для i от 1 до N нц для j от 1 до M если A[i, j] > Amax то Amax := A[i, j] все кц кц K := 0 | подсчет количества вхождений Amax нц для i от 1 до N нц для j от 1 до M если A[i, j] = Amax то K := K+1 все кц кц кон
|
![]() |
Program NumberOfMaximums;
Uses Crt;
Type Mas = Array [1..10, 1..10] of Integer;
Var A : Mas;
N, M, K, Amax, i, j : Integer; {K - искомый результат}
{--------------------------------------------}
Procedure InputOutput(Var A : Mas);
Begin {описание процедуры ввода-вывода матрицы}
ClrScr;
Write('Количество строк - '); ReadLn(N);
Write('Количество столбцов - '); ReadLn(M);
For i := 1 to N do {Ввод матрицы}
For j := 1 to M do
begin Write('A[' , i , ', ' , j , ']= ? ');
ReadLn(A[i, j])
end; WriteLn;
ClrScr; WriteLn(' Матрица А');
For i := 1 to N do {Вывод матрицы}
begin
For j := 1 to M do Write(A[i, j] : 5 );
WriteLn
end; WriteLn
End; { of InputOutput }
{--------------------------------------------}
Procedure MaxElement(Var A : Mas; Var Amax : Integer);
Begin {описание процедуры поиска Amax}
Amax := A[1, 1];
For i := 1 to N do
For j := 1 to M do
If A[i, j] > Amax then Amax := A[i, j];
End; {of MaxElement}
{--------------------------------------------}
Procedure HowMuch(Var A : Mas; K : Integer);
Begin {описание процедуры подсчета числа вхождений Amax}
K:=0;
For i := 1 to N do
For j := 1 to M do
if A[i, j] = Amax then K := K+1;
WriteLn('Максимальное число ', Amax : 3 ,
' встречается ', K, ' раз(a)'); ReadLn;
End; {of HowMuch}
{--------------------------------------------}
BEGIN
InputOutput(A); {Вызов процедуры ввода-вывода матрицы}
MaxElement(A, Amax); {Вызов процедуры поиска макс. элемента}
HowMuch(A, K) {Вызов процедуры подсчета числа
вхождений максимального элемента }
END.
CLS : INPUT "Количество строк - ", N
INPUT "Количество столбцов - ", M
DIM A(N, M) 'Резервирование памяти для матрицы
FOR i = 1 TO N 'Ввод матрицы
FOR j = 1 TO M
PRINT "A(" ; i ; ", " ; j ; ") = " ; : INPUT A(i, j)
NEXT j
NEXT i
CLS : PRINT "Матрица А" FOR i = 1 TO N 'Вывод матрицы FOR j = 1 TO M PRINT A(i, j) ; NEXT j PRINT NEXT i : PRINT
Amax = A(1, 1) 'Поиск максимального элемента FOR i = 1 TO N FOR j = 1 TO M IF A(i, j) > Amax THEN Amax = A(i, j) NEXT j NEXT i
K = 0 'Подсчет числа вхождений Amax FOR i = 1 TO N FOR j = 1 TO M IF A(i, j) = Amax THEN K = K + 1 NEXT j NEXT i
PRINT "Максимальное число " ; Amax ; PRINT " встречается " ; K ; " раз(a)" END
|
|
|
![]() |
![]() |
алг Поменять местами строки (арг цел N, M, арг цел P, Q, арг рез вещ таб А[1:N, 1:M] ) нач цел j, вещ Tmp нц для j от 1 до M | цикл по элементам строк матрицы Tmp:=A[P, j]; A[P, j]:=A[Q, j]; A[Q, j]:=Tmp кц кон
|
![]() |
Program Exchange;
Uses Crt;
Type Mas = Array [1..10, 1..10] of Real;
Var A : Mas;
N, M, P, Q, i, j : Integer;
Tmp : Real;
{--------------------------------------------------------------}
Procedure InputOutput(Var A:Mas); {описание процедуры ввода-вывода}
Begin
ClrScr;
Write('Количество строк - '); ReadLn(N);
Write('Количество столбцов - '); ReadLn(M);
For i := 1 to N do
For j := 1 to M do
begin Write('A[' , i , ', ' , j , '] = ? ');
Read(A[i, j])
end; WriteLn;
WriteLn('Номера строк, которые нужно поменять местами :');
Write('P = '); ReadLn(P); Write('Q = '); ReadLn(Q); WriteLn;
ClrScr; WriteLn('Исходная матрица : ' ) ;
For i := 1 to N do
begin
For j := 1 to M do Write(A[i, j] : 5 : 1);
WriteLn
end; WriteLn
End; { of InputOutput}
{--------------------------------------------------------}
Procedure Change(P, Q: Integer); {описание процедуры замены строк }
Begin
For j := 1 to M do
begin Tmp:=A[P, j]; A[P, j]:=A[Q, j]; A[Q, j]:=Tmp end;
End; { of Change}
{--------------------------------------------------------}
Procedure OutRes(Var A:Mas); {описание процедуры вывода результатов}
Begin
WriteLn('Матрица-результат :');
For i := 1 to N do
begin
For j := 1 to M do Write(A[i, j] : 5 : 1) ;
WriteLn
end; ReadLn
End; { of OutRes}
{--------------------------------------------------------}
BEGIN
InputOutput(A); {вызов процедуры ввода-вывода исходных данных}
Change(P, Q); {вызов процедуры замены строк }
OutRes(A) {вызов процедуры вывода результатов}
END.
CLS
INPUT "Количество строк - ", N
INPUT "Количество столбцов - ", M
DIM A(N, M) 'Резервирование памяти для матрицы
FOR i = 1 TO N 'Ввод матрицы
FOR j = 1 TO M
PRINT "A(" ; i ; ", " ; j ; ") = " ; : INPUT A(i, j)
NEXT j
NEXT i : PRINT
INPUT "P = " , P : INPUT "Q = " , Q
CLS : PRINT "Исходная матрица :" FOR i = 1 TO N 'Вывод матрицы FOR j = 1 TO M PRINT A(i, j) ; NEXT j PRINT NEXT i
FOR j = 1 TO M 'Замена строк Tmp=A(P,j):A(P,j)=A(Q,j):A(Q,j)=Tmp NEXT j PRINT : PRINT "Матрица-результат :" FOR i = 1 TO N 'Вывод результата FOR j = 1 TO M PRINT A(i, j) ; NEXT j PRINT ' переход на новую строку NEXT i END |
Результаты работы QBasic-программы
|
|
|
|
|
|
|
|
|
Школьный АЯ
алг Возрастание(арг цел N, арг рез вещ таб A[1:N]) нач цел i, j, вещ Tmp нц для i от 1 до N-1 нц для j от i+1 до N ecли A[i] > A[j] то Tmp:=A[i]; A[i]:=A[j]; A[j]:=Tmp все кц кц конИсполнение алгоритма
|
![]() |
Program Regulation;
Uses Crt;
Type Mas = Array [1..10] of Real;
Var A : Mas;
i, j, N : Integer;
Tmp : Real;
{--------------------------------------------}
Procedure Input; {описание процедуры ввода массива }
Begin
ClrScr;
Write('Введите N = '); ReadLn(N);
WriteLn('Введите элементы массива: ');
For i := 1 to N do
begin Write('A [ ' , i , ' ] = ');
ReadLn(A[i])
end;
End; {of Input}
{--------------------------------------------}
Procedure Regulate; {описание процедуры упорядочения по возрастанию}
Begin
For i := 1 to N-1 do
For j := i+1 to N do
If A[i] > A[j] then
begin Tmp:=A[i]; A[i]:=A[j]; A[j]:=Tmp
end;
End; {of Regulate}
{--------------------------------------------}
Procedure Output; {описание процедуры вывода результата}
Begin
WriteLn('Упорядоченный массив :');
For i:=1 to N do Write( A[i] : 6 : 1);
WriteLn; ReadLn
End; {of Output}
{--------------------------------------------}
BEGIN
Input; {вызов процедуры ввода массива }
Regulate; {вызов процедуры упорядочения по возрастанию}
Output {вызов процедуры вывода результата}
END.
CLS : INPUT "N = "; N : DIM A(N)
FOR i = 1 TO N
PRINT "A(" ; i ; ") = " ;
INPUT A(i)
NEXT i
FOR i = 1 TO N-1 FOR j = i+1 TO N IF A(i) > A(j) THEN Tmp=A(i) : A(i)=A(j) : A(j)=Tmp NEXT j NEXT i
PRINT : PRINT "Упорядоченный массив :" FOR i = 1 TO N PRINT A(i) ; NEXT i : PRINT END
|
|
|
N=3 ![]() |
|
алг Две суммы (арг цел N, арг вещ таб A[1:N, 1:N], рез вещ S1, S2) надо | S1 = сумма элементов ниже главной диагонали | S2 = сумма элементов выше главной диагонали нач цел i, j S1:=0; S2:=0 нц для i от 2 до N | циклы по элементам, расположенным нц для j от 1 до i-1 | ниже главной диагонали S1:=S1 + A[i, j] кц кц нц для i от 1 до N-1 | циклы по элементам, расположенным нц для j от i+1 до N | выше главной диагонали S2:=S2 + A[i, j] кц кц кон
Исполнение алгоритма
|
![]() |
Program TwoSums;
Uses Crt;
Var A : Array [1..10, 1..10] of Real;
S1, S2 : Real; {S1, S2 - суммы элементов, расположенных ниже
и выше главной диагонали, соответственно}
N, i, j : Integer;
{--------------------------------------------}
Procedure InputOutput;{описание процедуры ввода-вывода исходных данных}
Begin ClrScr;
Write('Количество строк и столбцов - '); ReadLn(N);
For i := 1 to N do {Ввод матрицы}
For j := 1 to N do
begin Write('A[' , i , ', ' , j , '] = ? ');
ReadLn(A[i, j])
end; WriteLn;
ClrScr; WriteLn(' Матрица А');
For i := 1 to N do {Вывод матрицы}
begin
For j := 1 to N do Write(A[i, j] : 5 : 1);
WriteLn
end; WriteLn
End; { of InputOutput }
{--------------------------------------------}
Procedure Under;
Begin {описание процедуры суммирования элементов, }
S1 := 0; {расположенных ниже главной диагонали }
For i := 2 to N do
For j := 1 to i-1 do
S1 := S1 + A[i, j];
WriteLn('О т в е т :');
WriteLn('Сумма элементов, лежащих ниже главной диагонали =', S1:5:1);
End;
{--------------------------------------------}
Procedure Over;
Begin {описание процедуры суммирования элементов,}
S2 := 0; {расположенных выше главной диагонали}
For i := 1 to N-1 do
For j := i+1 to N do
S2 := S2 + A[i, j];
WriteLn('Сумма элементов, лежащих выше главной диагонали =', S2:5:1);
ReadLn
End;
{--------------------------------------------}
BEGIN
InputOutput; {Вызов процедуры ввода-вывода матрицы }
Under; {Вычисление суммы элементов, лежащих ниже главной диагонали}
Over ; {Вычисление суммы элементов, лежащих выше главной диагонали }
END.
CLS : INPUT "Количество строк и столбцов - ", N
DIM A(N, N) 'Резервирование памяти для массива
FOR i = 1 TO N 'Ввод массива
FOR j = 1 TO N
PRINT "A(" ; i ; ", " ; j ; ") = " ; : INPUT A(i, j)
NEXT j
NEXT i
CLS : PRINT "Матрица А" FOR i = 1 TO N 'Вывод массива по строкам FOR j = 1 TO N PRINT A(i, j) ; NEXT j PRINT NEXT i : PRINT
S1 = 0 'Вычисление суммы элементов, лежащих ниже главной диагонали FOR i = 2 TO N FOR j = 1 TO i-1 S1 = S1 + A(i, j) NEXT j NEXT i
S2 = 0 'Вычисление суммы элементов, лежащих выше главной диагонали FOR i = 1 TO N-1 FOR j = i+1 TO N S2 = S2 + A(i, j) NEXT j NEXT i
PRINT "Сумма элементов, лежащих ниже главной диагонали равна "; S1 PRINT "Сумма элементов, лежащих выше главной диагонали равна "; S2 END
3.1. [Pascal | C | Basic] Дана матрица A(N, M). Найдите её наибольший элемент и номера строки и столбца, на пересечении которых он находится.
3.2. [Pascal | C | Basic] В каждой строке заданной матрицы A(N, M) вычислите сумму, количество и среднее арифметическое положительных элементов.
3.3. [Pascal | C | Basic] Для заданной целочисленной матрицы A(N, M) определите, является ли сумма её элементов чётным числом, и выведите на печать соответствующий текст.
3.4. [Pascal | C | Basic] Дана матрица A(N, M). Найдите количество элементов этой матрицы, больших среднего арифметического всех её элементов.
3.5. [Pascal | C | Basic] Дана целочисленная матрица A(N, M). Вычислите сумму и произведение тех её элементов, которые при делении на два дают нечётное число.
3.6. [Pascal | C | Basic] В заданной матрице A(N, M) поменяйте местами столбцы с номерами P и Q.
3.7. [Pascal | C | Basic] Дана матрица A(N, M). Вычислите вектор X(M), где значение Xj равно сумме положительных элементов j-го столбца матрицы A.
3.8. [Pascal | C | Basic] Дана матрица A(N, M). Получите вектор X(M), равный P-й строке матрицы, и вектор Y(N), равный Q-му столбцу матрицы.
3.9. [Pascal | C | Basic] Дана матрица A(N, M). Поменяйте местами её наибольший и наименьший элементы.
3.10. [Pascal | C | Basic]
По заданному n постройте матрицы размером (n,n) вида
| а) 1 0 ... 0
0 1 ... 0 . . . . 0 0 ... 1 |
б) n n-1 n-2 ... 1
0 n n-1 ... 2 . . . . . 0 0 0 ... n |
в) 0 0 ... 0 1
0 0 ... 1 2 . . . . . 1 2 ... n-1 n |
3.12. [Pascal | C | Basic] Дана матрица A(N, N). Перепишите элементы её главной диагонали в одномерный массив Y(N) и разделите их на максимальный элемент главной диагонали.
3.13. [Pascal | C | Basic] Дана матрица A(N, M). Получите Y = X1 . XN + X2 . XN-1 + ... + XN . X1 , где Xi - наибольший элемент в строке с номером i матрицы A.
3.14. [Pascal | C | Basic] Постройте матрицу A(N, N) , элементы которой определяются равенствами ai j = i + 2 . j , а также найдите произведение чётных элементов этой матрицы, удовлетворяющих условию ai j < P (0 < P < 3N).
3.15. [Pascal | C | Basic] Найдите наибольший элемент побочной диагонали заданной матрицы A(N, N) и выведите на печать всю строку, в которой он находится.
3.16. [Pascal | C | Basic] Дана целочисленная матрица A(N, M). Вычислите сумму и произведение нечётных отрицательных элементов матрицы, удовлетворяющих условию | ai j | < i.
3.17. [Pascal | C | Basic]
Для заданной матрицы А(N, N) найдите:
а) сумму всех элементов;
б) сумму элементов главной диагонали;
в) значения наибольшего и наименьшего из элементов главной диагонали.
3.18. [Pascal | C | Basic] По трём заданным матрицам А(N, N), В(N, N) и С(N, N) постройте матрицу Х того же размера, каждый элемент которой вычисляется по формуле xi j = max { ai j , bi j , ci j } .
3.19. [Pascal | C | Basic] Дана матрица А(N, N) и целое P. Преобразуйте матрицу по правилу: строку с номером P сделайте столбцом с номером P, а столбец с номером P сделайте строкой с номером P.
3.20. [Pascal | C | Basic] Для заданной матрицы A(N, N) найдите сумму элементов, расположенных в строках с отрицательным элементом на главной диагонали.
3.21. [Pascal | C | Basic]
Дана матрица A(N, M). Определите:
а) число ненулевых элементов в каждой строке матрицы;
б) общее число ненулевых элементов в матрице;
в) отношение числа ненулевых элементов в каждой строке матрицы
к общему числу ненулевых элементов в матрице.
3.22. [Pascal | C | Basic] Вычислите матрицу С(N, N), являющуюся суммой матриц А(N, N) и В(N, N). Матрица А задана, а элементы матрицы B вычисляются по формуле

3.23. [Pascal | C | Basic] Из заданной матрицы A(N, M) удалите строку с номером K и столбцы с номерами P и Q. Полученную матрицу уплотните.
3.24. [Pascal | C | Basic] В заданном массиве X(N, M) все числа различны. В каждой строке выбирается минимальный элемент, затем среди этих чисел выбирается максимальное. Напечатайте номер строки массива Х, в которой расположено выбранное число.
3.25. [Pascal | C | Basic] В заданном массиве A(N, M) переставьте строки так, чтобы суммы их элементов возрастали.
3.26. [Pascal | C | Basic] В заданном массиве A(N, N) вычислите две суммы элементов, расположенных выше и ниже побочной диагонали.
3.27. [Pascal | C | Basic] Дана матрица A(N, M). Переставляя её строки и столбцы, добейтесь того, чтобы наибольший элемент (один из них) оказался в верхнем левом углу.
3.28. [Pascal | C | Basic] Расстояние между двумя множествами точек это расстояние между наиболее близко расположенными точками этих множеств. Найдите расстояние между двумя заданными множествами точек на плоскости.
3.29. [Pascal | C | Basic] В заданном множестве точек на плоскости найдите пару точек с максимальным расстоянием между ними.
3.30. [Pascal | C | Basic] Задан список участников соревнований по плаванию и их результаты. Расположите результаты и фамилии участников в соответствии с занятым местом.
3.31. [Pascal | C | Basic] На основе сведений о ежедневном пробеге на тренировке спортсменов команды рассчитате среднесуточный и общий пробег каждого спортсмена за 20 дней.
3.32. [Pascal | C | Basic] Известен расход по N видам горючего в каждом из M автохозяйств. Определите для каждого хозяйства вид горючего с наибольшим и с наименьшим расходом.
3.33. [Pascal | C | Basic]
На основе сведений об отметках учеников класса в последней четверти
а) вычислите средние баллы по каждому предмету;
б) определите группу из пяти лучших учеников;
в) определите группу из пяти самых слабых учеников.
3.34. [Pascal | C | Basic]
Заданы запасы по N видам топлива в каждом из М районов города
и нормы минимально допустимого запаса по каждому виду топлива. Определите:
а) запасы каждого вида топлива на все районы;
б) запасы всех видов топлива для каждого района;
в) в каких районах запас того или иного вида топлива меньше
минимально допустимого и каких видов топлива запасено недостаточно в каждом
районе.
3.35. [Pascal | C | Basic] Последовательно (в лексикографическом порядке) напечатайте всевозможные перестановки целых чисел 1, 2, ..., n. Значение n задано.
3.36*. [Pascal | C | Basic] Напечатать элементы заданной матрицы А(N, N) в следующем порядке:

3.37*. [Pascal | C | Basic] Дана матрица A(N, N), где N нечётное число. Вычислите сумму её элементов из заштрихованной области.

3.38. [Pascal | C | Basic] Шестизначный номер автобусного билета называют "счастливым", если равны суммы его первых трёх и последних трёх цифр. Подсчитате количество "счастливых" билетов.
3.39. [Pascal | C | Basic] Дана последовательность целых чисел a1, a2, ..., am . Постройте на ее основе новую последовательность, содержащую только те числа, которые в исходную последоватеьность входят по одному разу.
3.40. [Pascal | C | Basic]
Даны два множества целых чисел:
a1,
a2, ...,
an и
b1,
b2, ...,
bm. Среди
a1,
a2, ...,
an нет повторяющихся чисел, нет их и среди
b1,
b2, ...,
bm. Постройте:
а) пересечение и объединение этих множеств;
б) множество, содержащее все члены множества b1,
b2, ...,
bm,
которые не входят в множество a
1, a2, ...,
an.
3.41. [Pascal | C | Basic] Вычислите P = 1 . 2 + 2 . 3 . 4 + 3 . 4 . 5 . 6 + ...+ N . (N+1) . ... . 2N.
3.42. [Pascal | C | Basic] Дана квадpатная таблица А(N, N), элементами котоpой являются нули и единицы. Подсчитайте, сколько в ней содержится квадpатов, состоящих из единиц, со стоpоной из двух элементов таблицы и pазвеpнутых по отношению к таблице на 45 гpадусов.
3.43. [Pascal | C | Basic] Дана квадpатная таблица А(N, N), элементами котоpой являются нули и единицы. Не проверяя значений элементов таблицы, замените каждый из нулей на единицу, а каждую из единиц на ноль.
3.44. [Pascal | C | Basic] Имеется N партий микросхем одного вида. Из каждой партии для контроля отобрали M микросхем. Тестовый контроль определил годность или негодность каждой микросхемы. Для того, чтобы вся партия была забракована, достаточно обнаружить в этих M выбранных микросхемах K негодных. По данным тестового контроля определите количество негодных микросхем в каждой партии и число забракованных партий.
3.45. [Pascal | C | Basic]
Числом Армстронга называется целое n-значное число, сумма n-х степеней цифр
которого равна самому этому числу. Например, числом Армстронга является число
407, так как 407 = 43 + 03 + 73. Найдите все числа Армстронга
для заданного n <= 10.