Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Air_life
0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 9
#1

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

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

Уважаемые программисты!! Прошу вас помочь с написанием программки в Си..Алгоритм накидала, а вот с написанием программки проблема..
Вот сама задача:
По заданным четырем сторонам выяснить, можно ли построить четырехугольник. если да - вывксти извещение, что можно, если нет - нельзя.Также при существовании такого 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

Спасибо огромное заранее за помощь!!!! =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2009, 03:02     программка с четырехугольником
Посмотрите здесь:

C++ нужна программка!!
Программка на С с массивом C++
C++ Программка по строкам
Программка с использованием switch C++
Программка на Си++ C++
C++ Программка квадратов чисел
программка на классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
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;
 
}
TanT
эволюционирую потихоньку
464 / 462 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
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. диагонали по четырём сторонам определить не возможно, так как это может быть и квадрад и ромб и в общем случае - параллеллепипед. точно исходные данные длины? может координаты?
Air_life
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
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
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;
 
}
Air_life
0 / 0 / 0
Регистрация: 17.10.2009
Сообщений: 9
18.10.2009, 20:30  [ТС]     программка с четырехугольником #6
Спасибо огромное!!! Система проверки программ выдает ошибку, но думаю, что это я что-то не так написала в формулах, думаю, сейчас найду свою ошибку.. Благодарю за оформление программы!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2009, 20:32     программка с четырехугольником
Еще ссылки по теме:

C++ c программка со строками
C++ программка по шаблонам
Не компилируется программка C++
C++ Не запускается программка
Программка зависает C++

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
18.10.2009, 20:32     программка с четырехугольником #7
Изначальные Ваши формулы с ошибками. Я их подправил. Попробуйте версию формул из моего кода.
Yandex
Объявления
18.10.2009, 20:32     программка с четырехугольником
Ответ Создать тему
Опции темы

Текущее время: 00:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru