Учеба и наука
Народ, помогите пожалуйста решить задачи по QBASIK!!!!( помогите составить программу) - вопрос №27765
1) Первая задача.
Тема Массивы!
/>/>/>
<span -x-system-font:="" font-size-adjust:="" font-size:="" font-stretch:="" font-style:="" font-variant:="" font-weight:="" line-height:="" new="" roman="" style="" times="">
Проверить, что точки A(a1,......,an),B(b1,......,bn),C(c1,.....,cn), D(d1,.....dn) являются вершинами параллелограмма, трапеции или ромба./>/>/>2)Вторая задача ( тема ряды)
arcsin(x)= x + ((1/2) * (x^3/3)) + (((1*3)/((2^2)*2!)) * ((x^5)/5)) + (((1*3*5)/((2^3)*3!))*((x^7)/7)) + ...................
/an/ < E ( A n-ное меньше Е)
/x/ < 1
/>(взяв х=1/2, можно подсчитать ПИ)
3) Третья задача
/>Найти минимальный среди положительных элементов матрицы 6х5, лежащих слева от четвертого столбца, и произведение
Кто может помогите....!!!!!
июнь 28, 2010 г.
-
Всего ответов: 1
-
'Задача 1
REM Проверить что точки A(a1,a2,...,an),B(b1,b2,...,bn),C(c1,c2,...,cn),D(d1,d2,...,dn),
REM являются вершинами параллелограмма, трапеции либо ромба
REM Будем доказывать исходя из параллельности сторон,
REM если две из сторон параллельны значит это одна из указанных фигур
REM Параллельность проверяем исходя из представления в виде векторов
REM Впоследствии вычисляя углы характеризуем фигуру более точно
REM Точность, с фиксированной запятой, очень точно не считается это не FORTRAN
REM Надо быть внимательным возможны ошибки связанные с округлением и приведением типов
E = 10000
INPUT "Введите n: ", n
IF n < 2 THEN
PRINT "n должно быть не меньше 2"
END
END IF
REM Координаты точек
DIM a(1 TO n)
DIM B(1 TO n)
DIM C(1 TO n)
DIM D(1 TO n)
REM Вектора
DIM VBA(1 TO n)
DIM VAB(1 TO n)
DIM VCA(1 TO n)
DIM VAC(1 TO n)
DIM VDA(1 TO n)
DIM VAD(1 TO n)
DIM VDC(1 TO n)
DIM VDB(1 TO n)
DIM VCB(1 TO n)
REM Длины векторов
MODVBA = 0
MODVCA = 0
MODVDA = 0
MODVDC = 0
MODVDB = 0
MODVCB = 0
FOR I = 1 TO n
PRINT "Введите координату"; I; "точки A:";
INPUT " ", a(I)
NEXT
FOR I = 1 TO n
PRINT "Введите координату"; I; "точки B:";
INPUT " ", B(I)
VBA(I) = B(I) - a(I)
VAB(I) = a(I) - B(I)
MODVBA = MODVBA + VBA(I) ^ 2
NEXT
MODVBA = SQR(MODVBA)
FOR I = 1 TO n
PRINT "Введите координату"; I; "точки C:";
INPUT " ", C(I)
VCB(I) = C(I) - B(I)
MODVCB = MODVCB + VCB(I) ^ 2
VCA(I) = C(I) - a(I)
VAC(I) = a(I) - C(I)
MODVCA = MODVCA + VCA(I) ^ 2
NEXT
MODVCB = SQR(MODVCB)
MODVCA = SQR(MODVCA)
FOR I = 1 TO n
PRINT "Введите координату"; I; "точки D:";
INPUT " ", D(I)
VDC(I) = D(I) - C(I)
MODVDC = MODVDC + VDC(I) ^ 2
VDB(I) = D(I) - B(I)
MODVDB = MODVDB + VDB(I) ^ 2
VDA(I) = D(I) - a(I)
VAD(I) = a(I) - D(I)
MODVDA = MODVDA + VDA(I) ^ 2
NEXT
MODVDC = SQR(MODVDC)
MODVDB = SQR(MODVDB)
MODVDA = SQR(MODVDA)
REM Флаги
FBADC = 0
FCADB = 0
FDACB = 0
FBACA = 0
FBADA = 0
FCADA = 0
PRINT
FOR I = 1 TO n
REM Проверим стороны AB и CD
FVBA = VBA(I) / MODVBA
FVAB = VAB(I) / MODVBA
FVDC = VDC(I) / MODVDC
IF FIX(FVBA * E) <> FIX(FVDC * E) THEN FBADC = 1
IF FIX(FVAB * E) <> FIX(FVDC * E) THEN FABDC = 1
REM Проверим стороны AC и BD
FVCA = VCA(I) / MODVCA
FVAC = VAC(I) / MODVCA
FVDB = VDB(I) / MODVDB
IF FIX(FVCA * E) <> FIX(FVDB * E) THEN FCADB = 1
IF FIX(FVAC * E) <> FIX(FVDB * E) THEN FACDB = 1
REM Проверим стороны AD и BC
FVDA = VDA(I) / MODVDA
FVAD = VAD(I) / MODVDA
FVCB = VCB(I) / MODVCB
IF FIX(FVDA * E) <> FIX(FVCB * E) THEN FDACB = 1
IF FIX(FVAD * E) <> FIX(FVCB * E) THEN FADCB = 1
NEXT
F = (FBADC AND FABDC) + (FCADB AND FACDB) + (FDACB AND FADCB)
SELECT CASE F
CASE 1:
IF (FBADC AND FABDC) = 1 THEN
MTA = MODVCA
MTB = MODVDA
MTC = MODVDC
ELSE
IF (FCADB AND FACDB) = 1 THEN
MTA = MODVBA
MTB = MODVDA
MTC = MODVDB
ELSE
IF (FDACB AND FADCB) = 1 THEN
MTA = MODVBA
MTB = MODVCA
MTC = MODVCB
END IF
END IF
END IF
FSQ = 0
FEQ = 0
SQ = SQR(MTA ^ 2 + MTB ^ 2)
IF FIX(SQ * E) = FIX(MTC * E) THEN FSQ = 1
IF MTA = MTB THEN FEQ = 1
IF FEQ = 1 AND FSQ = 1 THEN
PRINT "Квадрат"
ELSE
IF FEQ = 1 AND FSQ = 0 THEN
PRINT "Ромб"
ELSE
IF FEQ = 0 AND FSQ = 1 THEN
PRINT "Прямоугольник"
ELSE
PRINT "Параллелограмм"
END IF
END IF
END IF
CASE 2: PRINT "Трапеция"
CASE ELSE: PRINT "Ни одна из фигур"
END SELECT
'Задача 2
REM Решить уравнение вида arcsin(x)
REM в разложении ряда Тейлора x + ((1/2) * (x^3/3)) + (((1*3)/((2^2)*2!)) * ((x^5)/5)) + (((1*3*5)/((2^3)*3!))*((x^7)/7)) + ...
REM Последний член в ряде должен быть меньше заданного числа E, при |x|<1
INPUT "Введите x,E ", x, E
IF x > -1 AND x < 1 THEN
ARCSIN = x
I = 1
DO
f1 = 1
FOR j = 1 TO I
f1 = f1 * j
NEXT
p1 = 1
FOR j = 1 TO I - 1
p1 = p1 * (j * 2 + 1)
NEXT
s1 = 2 ^ I
p2 = I * 2 + 1
s2 = x ^ p2
a = (p1 / (s1 * f1)) * (s2 / p2)
ARCSIN = ARCSIN + a
I = I + 1
LOOP WHILE a >= E
PRINT "Арксинус"; x; "="; ARCSIN
ELSE
PRINT "Неверные начальные условия"
END IF
'Задача 3
REM Найти минимальный среди положительных элементов матрицы 6x5,
REM лежащих слева от четвёртого столбца, и произведение неотрицательных
REM элементов в остальной части матрицы
n = 6
m = 5
DIM A(1 TO n, 1 TO m)
MUL = -1
FOR I = 1 TO n
FOR J = 1 TO m
PRINT "Элемент в строке"; I;
PRINT "и в столбце"; J; "-";
INPUT " ", A(I, J)
IF J > 3 AND A(I, J) >= 0 THEN
MUL = MUL * A(I, J)
IF MUL < 0 THEN MUL = MUL * -1
END IF
NEXT
NEXT
PRINT "Исходная матрица:"
MIN = A(1, 1)
FOR I = 1 TO n
FOR J = 1 TO m
PRINT A(I, J);
IF J < 4 AND A(I, J) > 0 THEN
IF MIN > A(I, J) OR MIN <= 0 THEN MIN = A(I, J)
END IF
NEXT
PRINT
NEXT
PRINT "Минимальный элемент среди положительных в левой части матрицы:";
IF MIN > 0 THEN PRINT MIN ELSE PRINT "нет"
PRINT "Произведение неотрицательных элементов в правой части матрицы:";
IF MUL >= 0 THEN PRINT MUL ELSE PRINT "нет"