Дано: офисный центр расположен на 5-ом (5А и 5В) и 6-ом (6А, 6В и 6С) этажах здания. Необходимо: предложить пути построения ЛВС со следующими параметрами: – выход в Интернет и электронная почта; – обеспечить возможность обмена информацией между сотрудниками; – организовать резервирование данных; выделить сервер для установки на него 1С Бухгалтерии.
Размеры помещений задать самостоятельно.
Проектирование ЛВС выполнить с учетом планировки помещения, количества необходимых рабочих мест и имеющегося оборудования. Планировку необходимо осуществить с учетом санитарных норм. В соответствии с санитарными нормами СН245-71, расстояние между двумя боковыми стенками компьютеров должно быть не менее 1,2 м., если компьютеры располагаются друг за другом, то расстояние между двумя компьютерами должно быть не менее 2м. Кроме того, на один компьютер должно быть выделено не менее 6кв.м. площади помещения при использовании монитора ЛСД и 4,5 кв.м. при использовании ЖК или плазменного монитора.
Необходимо учитывать имеющийся ассортимент оборудования (например, при выборе коммутатора, необходимо учитывать количество портов).
На чертеже изобразить разводку локальной сети (расположение рабочих станций, расположение сервера, концентраторов, протяжку кабеля). Размеры помещений задать самостоятельно.
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016 procedure MatInput(a:array[,] of integer); begin Writeln('Вводите элементы матрицы построчно, в конце нажимая Enter'); for var i:=0 to Length(a,0)-1 do begin Write(i+1,': '); for var j:=0 to Length(a,1)-1 do Read(a[i,j]); end end;
procedure MatPrint(a:array[,] of integer); begin for var i:=0 to Length(a,0)-1 do begin for var j:=0 to Length(a,1)-1 do Print(a[i,j]); Writeln end end;
function IsEqual(a:array[,] of integer; j1,j2:integer; flag:array of boolean):boolean; // равны ли столбцы с индексами j1 и j2 begin if flag[j2]=False then begin Result:=True; for var i:=0 to Length(a,0)-1 do if a[i,j1]<>a[i,j2] then begin Result:=False; Break end; flag[j2]:=Result end end;
begin var n:=ReadInteger('Задайте число строк (столбцов) матрицы:'); var a:array[,] of integer; var m:=ArrFill(n,False); SetLength(a,n,n); MatInput(a); Writeln('*** Принятая матрица ***'); MatPrint(a); var k:=1; for var i:=0 to n-2 do for var j:=i+1 to n-1 do if IsEqual(a,i,j,m) then Inc(k); if k>1 then Writeln('Количество совпадающих столбцов равно ',k) else Writeln('нет совпадающих столбцов') end.
Тестовое решение Задайте число строк (столбцов) матрицы: 3 Вводите элементы матрицы построчно, в конце нажимая Enter 1: 1 2 2 2: 3 5 5 3: 2 2 2 *** Принятая матрица *** 1 2 2 3 5 5 2 2 2 Количество совпадающих столбцов равно 2
/*задача дурацкая для n > 3, ибо не понятно, что делать: 1) разбить все столбцы на группы одинаковых столбцов и посчитать внутри них число пар. Затем суммировать. 2) разбить столбцы на группы одинаковых столбцов и суммировать количество элементов в каждой из групп, если оно больше 1. То есть найти количество столбцов, для которых среди других столбцов найдется хотя бы один идентичный ему 3) разбить столбцы на группы одинаковых столбцов и вывести количество элементов в каждой группе, если оно больше 1. Для n=3 дело проще, потому что таких групп максимум одна, поэтому тут, по сути, неоднозначности не возникает (за исключением того, что в первом пункте...) В общем, решил делать как во втором пункте. ответ в любом случае будет верным.*/ #include <iostream> using namespace std; int n, result = 0; int **ar;//указатель на указатель для создания динамического двумерного массива bool *Flag;//указатель на первый элемент массива флагов void create(int n)//создание динамического массива { ar = new int*[n]; for (int i = 0; i < n; i++) ar[i] = new int[n]; Flag = new bool[n]; for (int i = 0; i < n; i++) Flag[i] = false; } void inp(int n) //ввод элементов массива { cout << "Input rows of matrix:\n"; for (int i = 0; i < n; i++) { cout << i + 1 << ": "; for (int j = 0; j < n; j++) cin >> ar[i][j]; } } void outp(int n) //вывод элементов массива { cout << "Elements of matrix:\n"; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) cout << ar[i][j] << " "; cout << endl; } } bool isEqual(int n, int j1, int j2)//проверка на равенство столбцов { bool res = true; for (int i = 0; i < n; i++) { if (ar[i][j1] != ar[i][j2]) { res = false; break; } } if (res)//если столбцы равны Flag[j2] = true; /*отмечаем столбец как просмотренный, чтобы в следующий раз его не сравнивать с другими столбцами*/ return res; } void calculate(int n)//считаем количество совпадающих столбцов { int k = 1; for (int j1 = 0; j1 < n; j1++) if (!Flag[j1]) { k = 1; for (int j2 = j1 + 1; j2 < n; j2++) if (!Flag[j2] && isEqual(n, j1, j2)) k++; if (k > 1)//имеется k одинаковых стобцов по типу столбца j1 result += k;//плюсует к итоговому результату } } int main(){ cout << "Input n: "; cin >> n; create(n); inp(n);//ввод массива outp(n);//вывод массива calculate(n);//расчет того, что требуется if (result > 0)/*количество столбцов, которые совпадают, по крайней мере, с одним из других столбцов*/ cout << "The number of columns, coinciding with at least one other column, is " << result << endl; else //все столбцы разные cout << "There is no matching columns\n"; return 0; }
procedure MatInput(a:array[,] of integer);
begin
Writeln('Вводите элементы матрицы построчно, в конце нажимая Enter');
for var i:=0 to Length(a,0)-1 do begin
Write(i+1,': ');
for var j:=0 to Length(a,1)-1 do Read(a[i,j]);
end
end;
procedure MatPrint(a:array[,] of integer);
begin
for var i:=0 to Length(a,0)-1 do begin
for var j:=0 to Length(a,1)-1 do Print(a[i,j]);
Writeln
end
end;
function IsEqual(a:array[,] of integer; j1,j2:integer;
flag:array of boolean):boolean;
// равны ли столбцы с индексами j1 и j2
begin
if flag[j2]=False then begin
Result:=True;
for var i:=0 to Length(a,0)-1 do
if a[i,j1]<>a[i,j2] then begin Result:=False; Break end;
flag[j2]:=Result
end
end;
begin
var n:=ReadInteger('Задайте число строк (столбцов) матрицы:');
var a:array[,] of integer;
var m:=ArrFill(n,False);
SetLength(a,n,n);
MatInput(a);
Writeln('*** Принятая матрица ***');
MatPrint(a);
var k:=1;
for var i:=0 to n-2 do
for var j:=i+1 to n-1 do
if IsEqual(a,i,j,m) then Inc(k);
if k>1 then Writeln('Количество совпадающих столбцов равно ',k)
else Writeln('нет совпадающих столбцов')
end.
Тестовое решение
Задайте число строк (столбцов) матрицы: 3
Вводите элементы матрицы построчно, в конце нажимая Enter
1: 1 2 2
2: 3 5 5
3: 2 2 2
*** Принятая матрица ***
1 2 2
3 5 5
2 2 2
Количество совпадающих столбцов равно 2
1) разбить все столбцы на группы одинаковых столбцов и посчитать внутри них число пар. Затем суммировать.
2) разбить столбцы на группы одинаковых столбцов и суммировать количество элементов в каждой из групп, если оно больше 1. То есть найти количество столбцов, для которых среди других столбцов найдется хотя бы один идентичный ему
3) разбить столбцы на группы одинаковых столбцов и вывести количество элементов в каждой группе, если оно больше 1.
Для n=3 дело проще, потому что таких групп максимум одна, поэтому тут, по сути, неоднозначности не возникает (за исключением того, что в первом пункте...)
В общем, решил делать как во втором пункте. ответ в любом случае будет верным.*/
#include <iostream>
using namespace std;
int n, result = 0;
int **ar;//указатель на указатель для создания динамического двумерного массива
bool *Flag;//указатель на первый элемент массива флагов
void create(int n)//создание динамического массива
{
ar = new int*[n];
for (int i = 0; i < n; i++)
ar[i] = new int[n];
Flag = new bool[n];
for (int i = 0; i < n; i++)
Flag[i] = false;
}
void inp(int n) //ввод элементов массива
{
cout << "Input rows of matrix:\n";
for (int i = 0; i < n; i++)
{
cout << i + 1 << ": ";
for (int j = 0; j < n; j++)
cin >> ar[i][j];
}
}
void outp(int n) //вывод элементов массива
{
cout << "Elements of matrix:\n";
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << ar[i][j] << " ";
cout << endl;
}
}
bool isEqual(int n, int j1, int j2)//проверка на равенство столбцов
{
bool res = true;
for (int i = 0; i < n; i++)
{
if (ar[i][j1] != ar[i][j2])
{
res = false;
break;
}
}
if (res)//если столбцы равны
Flag[j2] = true; /*отмечаем столбец как просмотренный, чтобы в следующий раз его не сравнивать с другими столбцами*/
return res;
}
void calculate(int n)//считаем количество совпадающих столбцов
{
int k = 1;
for (int j1 = 0; j1 < n; j1++)
if (!Flag[j1])
{
k = 1;
for (int j2 = j1 + 1; j2 < n; j2++)
if (!Flag[j2] && isEqual(n, j1, j2))
k++;
if (k > 1)//имеется k одинаковых стобцов по типу столбца j1
result += k;//плюсует к итоговому результату
}
}
int main(){
cout << "Input n: ";
cin >> n;
create(n);
inp(n);//ввод массива
outp(n);//вывод массива
calculate(n);//расчет того, что требуется
if (result > 0)/*количество столбцов, которые совпадают, по крайней мере, с одним из других столбцов*/
cout << "The number of columns, coinciding with at least one other column, is " << result << endl;
else //все столбцы разные
cout << "There is no matching columns\n";
return 0;
}