В Бейсике есть встроенная функция 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$ = ""
Немного теории. Для того, чтобы избежать переполнения разрядной сетки, значение квадрата натурального числа не должно превышать максимального числа, представимого выбранным типом данных. В языке Паскаль числа типа longint записываются в четырех байтах в дополнительном коде, т.е. максимальное значение числа не может превышать 2³¹-1. Тогда максимальное натуральное число, квадрат которого мы можем вычислить, равно целой части от величины:
//PascalABC.Net 3.0, сборка 1066 var s:string; i,n,lim,l:longint; begin lim:=Trunc(exp(15.5*ln(2))); Write('Введите номер позиции: '); Read(n); i:=0; l:=0; while (l<n) and (i<=lim) do begin Inc(i); Str(i*i,s); l:=l+Length(s); end; if i<=lim then Writeln('Искомая цифра- ',s[Length(s)-l+n]) else Writeln('Решения в типе данных longint невозможно') end.
Тестовое решение: Введите номер позиции: 4 Искомая цифра- 1
2
Объяснение:
сначала переменной k присваивают значение -1 (k = -1)
дальше идет цикл while (этот цикл будет выполняться до тех пор, пока k < 3 (пока 3 больше чем переменная k)
Идет проверка: k < 3 (цикл проверяет больше ли тройка переменной k)
Так как k = -1, то k < 3 (3 больше чем -1)
Начинается выполнение цикла и к переменной k прибавляют двойку (k = k + 2) и k = -1 + 2 = 1
То есть k = 1
Дальше идет снова проверка: k < 3 (тройка больше k)
Так как k = 1, то k < 3 (3 больше чем 1)
И начинается снова выполнение цикла: к k прибавляют 2 и k = 1 + 2 = 3
k = 3
Дальше идет снова проверка: k < 3 (тройка больше k)
Но так как k = 3, то 3 не больше k (k < 3, 3 < 3), так как 3 не может быть больше трех.
Цикл останавливается ( 3 не больше k, из за этого цикл while больше не работает и к k не прибавляют уже двойку)
В итоге цикл работал 2 раза: первый раз к k прибавили 2 (k = k + 2 = -1 + 2 = 1, k = 1), 2 раз (k = k + 2 = 1 + 2= 3, k = 3)