2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 с++ ,Проверьте программу
Сообщение07.01.2014, 11:43 
Здравствуйте,Написал программу по этой задаче:
Разработать функцию rectPS(x1, y1, x2, y2, P, S), вычисляющую периметр P и площадь S прямоугольника со сторонами, параллельными осям координат, по координатам (x1, y1), (x2, y2) его противоположных вершин (x1, y1, x2, y2 — входные, P и S — выходные параметры). В качестве результирующего значения функция должна возвращать истину, если прямоугольник не является вырожденным (т.е. одна из его сторон имеет нулевую длину) и ложь – в противном случае. С помощью этой процедуры найти периметры и площади трех прямоугольников с данными противоположными вершинами.

Но сомневаюсь в её правильности,вот код:
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
#include <stdlib.h>
#include <math.h>
#include <Windows.h>
#include <iostream>
using namespace std;
bool rectPS(x1,y1,x2,y2,*P,*S)
{
    bool res=true;//переменная возвращающая истину или ложь
    int a=(sqrt((double)(x2-x1)+(double)(y2-y1)));//обозначим стороны как а и b
    int b=(sqrt((double)(x2-x1))+((double)(y1-y1)));
    if((a!=0) && (b!=0)){ //b и a не должны равняться нулю,иначе прямоугольник вырожденный
    *S=(sqrt((double)(x2-x1)+(double)(y2-y1)))*(sqrt((double)(x2-x1)+(double)(y2-y1)));   // площадь
    *P=((sqrt((double)(x2-x1)+(double)(y2-y1)))+(sqrt((double)(x2-x1)+(double)(y2-y1))))*2; //периметр
        return true; //возвращаем истину
    }
    else
        return false; //иначе ложь
}
 
void main()
{
    setlocale(LC_ALL,"Russian");
    int x1,x2,y1,y2;
    int P=0,  S=0;
    cout<<"Ввести координаты\nx1 и x2:\n";
    cin>>x1>>x2;
    cout<<"Ввести координаты\ny1 и y2:\n";
    cin>>y1>>y2;
    if(rectPS( x1,y1,x2,y2,&P,&S) == true)
    {
        cout<<"Площадь:\n"<<S<<"\n";
        cout<<"Периметр:\n"<<P<<"\n";
    }
    else    cout<<"Прямоугольник является вырожденным! \n";
    system("pause");
}

Проверьте !!...Заранее спасибо

 
 
 
 Re: с++ ,Проверьте программу
Сообщение07.01.2014, 16:14 
Во-первых у вас какое-то странное определение длин сторон: $a = \sqrt{(x_2-x_1) + (y_2-y_1)}$.
Далее, у вас не указаны типы переменных в определении функции.

Проверку
Используется синтаксис C++
if (f(a,b,c) == true) {...
делать не надо.

 
 
 
 Re: с++ ,Проверьте программу
Сообщение07.01.2014, 17:23 
1. А прогнать не судьба?
2. Вот ну интересна таки своей изощрённой непонятностию логика. Объявляем переменную res — и чо? На кой? Из x-ов с y-ми делаем double, извлекаем корень и приводим к int... Впрочем, какая разница, если при "вычислении" площади и периметра всё равно подставляются эти невообразимые формулы... Вы там что, монетку кидаете и в зависимости от результата выбираете следующий символ?

 
 
 
 Re: с++ ,Проверьте программу
Сообщение07.01.2014, 17:44 
Аватара пользователя
Дичь какая-то. Стороны же параллельны осям, на кой чёрт квадратные корни. Да и прочее... :facepalm:

 
 
 
 Re: с++ ,Проверьте программу
Сообщение08.01.2014, 12:47 
Taus в сообщении #810728 писал(а):
Во-первых у вас какое-то странное определение длин сторон: $a = \sqrt{(x_2-x_1) + (y_2-y_1)}$.
Далее, у вас не указаны типы переменных в определении функции.

Проверку
Используется синтаксис C++
if (f(a,b,c) == true) {...
делать не надо.

Вообще-то надо,см.текст задачи

-- 08.01.2014, 12:48 --

Aritaborian в сообщении #810769 писал(а):
Дичь какая-то. Стороны же параллельны осям, на кой чёрт квадратные корни. Да и прочее... :facepalm:

А как правильно?

 
 
 
 Re: с++ ,Проверьте программу
Сообщение08.01.2014, 12:48 
Аватара пользователя
st.basic в сообщении #811271 писал(а):
Вообще-то надосм.текст задачи
Не беспокойтесь, все ответившие вам прочли текст задачи ;-)

 
 
 
 Re: с++ ,Проверьте программу
Сообщение08.01.2014, 18:00 
st.basic в сообщении #811271 писал(а):
А как правильно?
А сделайте рисунок.

 
 
 [ Сообщений: 7 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group