Если х1,у1 - координаты одного конца 1-го отрезка, х2,у2 - координаты его второго конца, то уравнение прямой, на которой этот отрезок лежит, такое: у=у1+(у2-у1)(х-х1)/(х2-х1). Для второго отрезка (х3,у3) и (х4,у4), прямая у=у3+(у4-у3)(х-х3)/(х4-х3). Абсцисса точки пересечения (х,у) этих прямых находится из равенства
у1+(у2-у1)(х-х1)/(х2-х1)=у3+(у4-у3)(х-х3)/(х4-х3). Это х надо выразить в виде формулы до написания программы, чтобы х вычислялось в программе по этой формуле.
Схема программы: 1) проверка параллельности отрезков. Если "да", то выход и ответ "не существует". 2) проверка выполнения двух двойных неравенств: x1 <= x <= x2, x2 <= x <= x4. Если оба неравенства "истина", то ответ "существует", иначе "не существует"
Обратите внимание, что х1 должно быть меньше чем х2, и х3 меньше чем х4.
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
int main()
{
int a[20];
int i, ibeg, iend, s;
setlocale(LC_ALL, "Russian");
srand(time(NULL));
for (i = 0; i < 20; i++) {
a[i] = (double)rand() / (RAND_MAX + 1) * 10;
cout << a[i] << " ";
}
ibeg = -1;
for (i = 0; i < 20; i++) {
if (a[i] == 0) {
ibeg = i;
break;
}
}
iend = -1;
for (i = 20; i > 0; i--) {
if (a[i] == 0) {
iend = i;
break;
}
}
if (ibeg != -1 && iend != -1) {
s = 0;
for (i = ibeg + 1; i < iend; i++)
s += a[i];
cout << "\nСумма = " << s << "\n";
}
else
cout << "\nНулевые элементы не найдены.\n";
}