0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 9
1

программка с четырехугольником

18.10.2009, 03:02. Показов 1754. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые программисты!! Прошу вас помочь с написанием программки в Си..Алгоритм накидала, а вот с написанием программки проблема..
Вот сама задача:
По заданным четырем сторонам выяснить, можно ли построить четырехугольник. если да - вывксти извещение, что можно, если нет - нельзя.Также при существовании такого 4х угольника найти для каждой его диагонали ее максимальную и минимальную длину. Файл входных данных 00xy_in.txt, на выходе в 00xy_out.txt
примеры работы программы :

введите длины стран 4х уг-ка
10 10 10 10
4х уг существует
длина диагонали AC: interval (0,20)
длина диагонали BD: interval (0,20)

введите длины стран 4х уг-ка
10 10 20 20
4х уг существует
длина диагонали AC: interval (0,20)
длина диагонали BD: interval (10,30)

введите длины стран 4х уг-ка
10 20 10 20
4х уг существует
длина диагонали AC: interval (10,30)
длина диагонали BD: interval (10,30)

введите длины стран 4х уг-ка
10 10 10 20
4х уг существует
длина диагонали AC: interval (10,20)
длина диагонали BD: interval (10,20)

введите длины стран 4х уг-ка
10 20 10 20
4х уг существует
длина диагонали AC: interval (10,30)
длина диагонали BD: interval (10,30)

введите длины стран 4х уг-ка
20 10 10 10
4х уг существует
длина диагонали AC: interval (10,20)
длина диагонали BD: interval (10,20)

введите длины стран 4х уг-ка
10 10 10 30
4х уг не существует

введите длины стран 4х уг-ка
10 20 30 0
данные введены неверно

введите длины стран 4х уг-ка
10 20 30 asdf
данные введены неверно

Алгоритм примерно такой
1) Для доказательства, что 4х угольник существует :
if((a+b+c)>d) & ((a+b+d)>c)) & ((a+c+d )>b) & ((b+c+d)>a) то 4х уг существует, иначе нет
2) для нахождения максимальной и минимальной длины каждой из диагоналей (АС и ВD):
max AC: if (b+c)<=(a+d) then max1=b+c else max1=a+d;
Max BD: if (a+b)<=(c+d) then max2=a+b else max2=c+d
min AC: if ((a+b)<=(c+d)) and (c<=d) then min1=d-c
if ((a+b)<=(c+d)) and (c>=d) then min1=c-d
min BD: if ((b+c)<=(a+d)) and (a>=d) then min2=a-d
if ((b+c)<=(a+d)) and (a<=d) then min2=d-a

Спасибо огромное заранее за помощь!!!! =)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2009, 03:02
Ответы с готовыми решениями:

Преобразование глобальных координат точки в локальную систему координат, задаваемую четырехугольником
Добрый вечер! Есть произвольный четырехугольник на плоскости. Известны глобальные координаты...

Определить, является фигура ABCD выпуклым или не выпуклым четырёхугольником
Даны координаты четырёх точек А(Ax;Ay), B(Bx;By), C(Cx;Cy), D(Dx; Dy) на плоскости. Как проще всего...

Программка
Тут в общем сорян за такую тему, нужна помощь (если не сложно), написать приложение небольшое: ...

Программка
Нужна помощь с прогой на с++, мы с ним на вы( суть такая: юзер вводит число n. Программа выдаёт...

6
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
18.10.2009, 06:28 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <process.h>
 
int main()
{
    int a, b, c, d, max, min;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    printf("Ââåäèòå çíà÷åíèå ñòîðîíû A\n");
    scanf("%d", &a);
    printf("Ââåäèòå çíà÷åíèå ñòîðîíû B\n");
    scanf("%d", &b);
    printf("Ââåäèòå çíà÷åíèå ñòîðîíû C\n");
    scanf("%d", &c);
    printf("Ââåäèòå çíà÷åíèå ñòîðîíû D\n");
    scanf("%d", &d);
    if(a<=0 || b<=0 || c<=0 || d<=0)
    {
        printf("Äàííûå ââåäåíû íå âåðíî\n");
        exit(1);
    }
    if((a+b+c)>d && (a+b+d)>c && (a+c+d)>b && (b+c+d)>a)
    {   
        if(a+b<=c+d)
             max=a+b;
         else
             max=c+d;
         if(a+b<=c+d)
         {
             if(c<=d)
                 min=d-c;
             else 
                 min=c-d;
         }
         else
         {
             if(a<=b)
                 min=b-a;
             else
                 min=a-b;
         }       
         printf("äëèíà äèàãîíàëè AC: interval (%d,%d)\n", min, max);
         if(b+c<=a+d)
             max=b+c;
         else
             max=a+d;
         if(b+c<=a+d)
         {
             if(a>=d)
                 min=a-d;
             else
                 min=d-a;
         }
         else
         {
             if(b>=c)
                 min=b-c;
             else
                 min=c-d;
         }       
         printf("äëèíà äèàãîíàëè BD: interval (%d,%d)\n", min, max);
    }
    else
        printf("4õ óã íå ñóùåñòâóåò\n");
    system("pause");
    return 0;
 
}
1
эволюционирую потихоньку
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
18.10.2009, 06:31 3
Цитата Сообщение от Air_life Посмотреть сообщение
Уважаемые программисты!! Прошу вас помочь с написанием программки в Си..Алгоритм накидала, а вот с написанием программки проблема..
Вот сама задача:
По заданным четырем сторонам выяснить, можно ли построить четырехугольник. если да - вывксти извещение, что можно, если нет - нельзя.Также при существовании такого 4х угольника найти для каждой его диагонали ее максимальную и минимальную длину. Файл входных данных 00xy_in.txt, на выходе в 00xy_out.txt
примеры работы программы :

введите длины стран 4х уг-ка
10 10 10 10
4х уг существует
длина диагонали AC: interval (0,20)
длина диагонали BD: interval (0,20)
Разъясните следующие впоросы:
1. данный ввод больше похож на ввод с консоли, зачем тогда 00xy_in.txt?
2. диагонали по четырём сторонам определить не возможно, так как это может быть и квадрад и ромб и в общем случае - параллеллепипед. точно исходные данные длины? может координаты?
0
0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 9
18.10.2009, 11:25  [ТС] 4
ой... возможно здесь это лишнее.(по крайней мере файл входных данных) А невозможно результаты работы программы записываит в файл out? Знаю, что в Паскале можно,а что с СИ? А на счет диагонали - нельзя точно определить, но возможно найти МИН и МАх диагоналей, вычисления выше. можете проверить valeriikozlov, спасибо за помощь!!!!!

Добавлено через 18 минут
Хотя нет, не лишнее.. Все, что вводится с клавиатуры пользователем (это 4 числа длин сторон), должно записываться в 00xy_in.txt , все, что будет на выходе (а это :

введите длины стран 4х уг-ка
4х уг существует
длина диагонали AC: interval (0,20)
длина диагонали BD: interval (0,20))

должно писаться в 00xy_out.txt
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
18.10.2009, 12:56 5
Я оставил как и в прежнем варианте вывод данных на экран, просто добавил запись нужных данных в файлы: 00xy_in.txt и 00xy_out.txt
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <conio.h>
#include <stdio.h>
#include <windows.h>
#include <process.h>
int main()
{
        int a, b, c, d, max, min;
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        FILE *file_in = fopen("00xy_in.txt", "w");
        FILE *file_out = fopen("00xy_out.txt", "w");
        fprintf(file_out, "ââåäèòå äëèíû ñòðàí 4õ óã-êà\n");
        printf("Ââåäèòå çíà÷åíèå ñòîðîíû A\n");
        scanf("%d", &a);
        fprintf(file_in, "%d ", a);
        printf("Ââåäèòå çíà÷åíèå ñòîðîíû B\n");
        scanf("%d", &b);
        fprintf(file_in, "%d ", b);
        printf("Ââåäèòå çíà÷åíèå ñòîðîíû C\n");
        scanf("%d", &c);
        fprintf(file_in, "%d ", c);
        printf("Ââåäèòå çíà÷åíèå ñòîðîíû D\n");
        scanf("%d", &d);
        fprintf(file_in, "%d ", d);
        if(a<=0 || b<=0 || c<=0 || d<=0)
        {
                printf("Äàííûå ââåäåíû íå âåðíî\n");
                fprintf(file_out, "Äàííûå ââåäåíû íå âåðíî\n");
                exit(1);
        }
        if((a+b+c)>d && (a+b+d)>c && (a+c+d)>b && (b+c+d)>a)
        {       
                if(a+b<=c+d)
                         max=a+b;
                 else
                         max=c+d;
                 if(a+b<=c+d)
                 {
                         if(c<=d)
                                 min=d-c;
                         else 
                                 min=c-d;
                 }
                 else
                 {
                         if(a<=b)
                                 min=b-a;
                         else
                                 min=a-b;
                 }               
                 printf("äëèíà äèàãîíàëè AC: interval (%d,%d)\n", min, max);
                 fprintf(file_out, "4õ óã ñóùåñòâóåò\n");
                 fprintf(file_out, "äëèíà äèàãîíàëè AC: interval (%d,%d)\n", min, max);
 
                 if(b+c<=a+d)
                         max=b+c;
                 else
                         max=a+d;
                 if(b+c<=a+d)
                 {
                         if(a>=d)
                                 min=a-d;
                         else
                                 min=d-a;
                 }
                 else
                 {
                         if(b>=c)
                                 min=b-c;
                         else
                                 min=c-d;
                 }               
                 printf("äëèíà äèàãîíàëè BD: interval (%d,%d)\n", min, max);
                 fprintf(file_out, "äëèíà äèàãîíàëè BD: interval (%d,%d)\n", min, max);
        }
        else
        {
                printf("4õ óã íå ñóùåñòâóåò\n");
                fprintf(file_out, "4õ óã íå ñóùåñòâóåò\n");
        }
        fclose(file_in);
        fclose(file_out);
        system("pause");
        return 0;
 
}
1
0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 9
18.10.2009, 20:30  [ТС] 6
Спасибо огромное!!! Система проверки программ выдает ошибку, но думаю, что это я что-то не так написала в формулах, думаю, сейчас найду свою ошибку.. Благодарю за оформление программы!!!
0
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
18.10.2009, 20:32 7
Изначальные Ваши формулы с ошибками. Я их подправил. Попробуйте версию формул из моего кода.
0
18.10.2009, 20:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2009, 20:32
Помогаю со студенческими работами здесь

программка
люди хелп нужно задачку решить в одномерном массиве состоящем из n вещественных элементов...

Программка
Здравствуйте, помогите сделать задание, нужно &quot;Ввести цифры словами, чтобы выводилось при написании...

Программка на Си++
Добрый вечер, пишу свою первую программу на с++ и вот какое условие стоит в ней, программу написал...

программка.
подскажите плз!!!!!

Программка
Помогите пожалуйста отредактировать программу.

Не компилируется программка
Здравствуйте Учусь программированию. Сейчас прохожу глобальные переменные. Переписал программку из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru