Учеба и наука

Народ, помогите пожалуйста решить задачи по 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 "нет"

    октябрь 24, 2010 г.