Сделать в бейсике ! даны действительные положительные числа a b c по трём сторонам с длинами a b c можно построить треугольник . найти углы треугольника
В Бейсике есть встроенная функция ATN - арктангенс, поэтому угол можно в градусах посчитать.
DIM a, b, c, cs, cst, ang, PI INPUT " a = ", a INPUT " b = ", b INPUT " c = ", c PRINT PI = 3.141593 cs = (b * b + c * c - a * a) / (2 * b * c) cst = cs IF cs < 0 THEN cst = SQR(1 - cs * cs) ang = ATN(SQR(1 - cst * cst) / cst) * 360 / (2 * PI) IF cs < 0 THEN ang = ang + 90 PRINT "угол A = ", PRINT USING "###.##"; ang cs = (a * a + c * c - b * b) / (2 * a * c) cst = cs IF cs < 0 THEN cst = SQR(1 - cs * cs) ang = ATN(SQR(1 - cst * cst) / cst) * 360 / (2 * PI) IF cs < 0 THEN ang = ang + 90 PRINT "угол B = ", PRINT USING "###.##"; ang cs = (a * a + b * b - c * c) / (2 * a * b) cst = cs IF cs < 0 THEN cst = SQR(1 - cs * cs) ang = ATN(SQR(1 - cst * cst) / cst) * 360 / (2 * PI) IF cs < 0 THEN ang = ang + 90 PRINT "угол C = ", PRINT USING "###.##"; ang PRINT "Выход - любая клавиша ... " DO LOOP WHILE INKEY$ = ""
// PascalABC.NET 3.1, сборка 1204 от 24.03.2016 begin var a:=SeqRandom(ReadInteger('n='),-20,20) .Select(i->real(i)).ToArray; a.Println; var b:=a[0]*a.Skip(1).Where(x->x>0).Aggregate(1.0,(p,x)->p*x); Writeln(b); end.
Пояснения по каждому оператору 1. Запрашивается количество элементов в последовательности n, генерируется последовательность из n целых чисел в диапазоне от -20 до 20, затем элементы последовательности преобразуются в вещественное представление и образуют динамический массив а. 2. Элементы массива а выводятся на экран. 3. Первый элемент массива умножается на произведение остальных положительных элементов и результат присваивается переменной b. 4. Значение переменной b выводится на экран. В целях небольшого упрощения предполагается, что n>1 и что среди элементов массива, за исключением первого, имеется хотя бы один положительный элемент. Это связано с тем, что в задании отсутствует описание действий в случае, если вышеописанное предположение окажется неверным.
Переход к вещественному представлению чисел связан с обходом переполнения разрядной сетки при целочисленном умножении для больших значений n.
В C++: #include <iostream> #include <ctime> #include <iomanip> int main() { using namespace std;
//размерность матрицы const int N = 5; int matrix[N][N]; srand(time(0)); int i, j;
//как-нибудь заполняем матрицу for (i = 0; i < N; i++) for (j = 0; j < N; j++) matrix[i][j] = rand() % (N * N + 1) - (N * N / 2);
//вывод исходной матрицы на экран for (i = 0; i < N; i++) { for (j = 0; j < N; j++) cout << setw(4) << matrix[i][j]; cout << endl; }
//проверка, есть ли вообще числа, чтобы умножать int p = 0; for (i = 0; i < N; i++) for (j = 0; j < N; j++) if (i > j && i > N - j - 1 && matrix[i][j] < 0) { p = 1; break; }
//подсчёт требуемого произведения for (i = 0; i < N; i++) for (j = 0; j < N; j++) if (i > j && i > N - j - 1 && matrix[i][j] < 0) p = p * matrix[i][j];
//нахождение модуля произведения if (p < 0) p = -p;
//вывод этого значения на экран cout << "Multiplication: " << p << endl; return 0; }
поэтому угол можно в градусах посчитать.
DIM a, b, c, cs, cst, ang, PI
INPUT " a = ", a
INPUT " b = ", b
INPUT " c = ", c
PRINT
PI = 3.141593
cs = (b * b + c * c - a * a) / (2 * b * c)
cst = cs
IF cs < 0 THEN cst = SQR(1 - cs * cs)
ang = ATN(SQR(1 - cst * cst) / cst) * 360 / (2 * PI)
IF cs < 0 THEN ang = ang + 90
PRINT "угол A = ",
PRINT USING "###.##"; ang
cs = (a * a + c * c - b * b) / (2 * a * c)
cst = cs
IF cs < 0 THEN cst = SQR(1 - cs * cs)
ang = ATN(SQR(1 - cst * cst) / cst) * 360 / (2 * PI)
IF cs < 0 THEN ang = ang + 90
PRINT "угол B = ",
PRINT USING "###.##"; ang
cs = (a * a + b * b - c * c) / (2 * a * b)
cst = cs
IF cs < 0 THEN cst = SQR(1 - cs * cs)
ang = ATN(SQR(1 - cst * cst) / cst) * 360 / (2 * PI)
IF cs < 0 THEN ang = ang + 90
PRINT "угол C = ",
PRINT USING "###.##"; ang
PRINT "Выход - любая клавиша ... "
DO
LOOP WHILE INKEY$ = ""