IPB

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  1 2 3 >  
Ответить в эту темуОткрыть новую тему
> С++ нахождения площади и периметра треугольника по координатам, Переход от Pascal к C++
InFuz
сообщение 11.3.2010, 14:16
Сообщение #1


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



В общем закончили 1 семестр и во втором начался C++ (был и остался Pascal)
Посоветуйте какую нибудь книжку или самоучитель по C++.
Пока читаю Г. Шилд "Самоучитель С++"

И помогите разобраться с 1 лабой. Мало того, что в С++ пока не рублю так еще и задача... я ее даже на листке не решу не то что уж прогу по ней писать.

Известны координаты вершин треугольника ABC: A(x1,y1), B(x2,y2) и C(x3,y3). Найти
его площадь и периметр.

Нашел в инете пару формул, хотя точно не уверен что те.
Вот, что пока смог накорябать.

# include <iostream.h>
# include <stdio.h>
# include <math.h>

int main()

{
int x1,x2,x3,y1,y2,y3;
double s,p,a,b,c;
cout<<"\n Лабораторная работа №1";
cout<<"\n x1="; cin>>x1;
cout<<"\n x2="; cin>>x2;
cout<<"\n x3="; cin>>x3;
cout<<"\n y1="; cin>>y1;
cout<<"\n y2="; cin>>y2;
cout<<"\n y3="; cin>>y3;
a = sqrt((x1-x2)^2+(y1-y2)^2);
b = sqrt((x1-x3)^2+(y1-y3)^2);
c = sqrt((x2-x3)^2+(y2-y3)^2);
p = a+b+c;
cout<<"\n p=" <<p;
/* cout<<"p="<<p;
s=(x1-x3)*(y2-y3)*(x2-x3)*(y1-y3)/2;
cout<<"s="<<s; */
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Евгений М.
сообщение 11.3.2010, 15:09
Сообщение #2


Студент
**

Группа: Продвинутые
Сообщений: 199
Регистрация: 6.11.2009
Город: Уфа
Вы: студент



Формула Герона.

pp=p*0.5;
s=sqrt(pp*(pp-a)*(pp- b )*(pp-c));

Не забудьте объявить pp как double.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 11.3.2010, 16:15
Сообщение #3


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Пару вопросов.
Что такое pp (p я так понимаю пириметр).
И как избавиться от ошибки когда вычисляется a, b, c и значение под корнем становиться отрицательным, например для треугольника а(1,1) b(-1,1) c(0,-1).
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Pavlov Andrey
сообщение 11.3.2010, 16:25
Сообщение #4


Школьник
*

Группа: Продвинутые
Сообщений: 20
Регистрация: 7.5.2009
Город: Москва



да pp - у него это периметр, а в Героне надо полу-периметр(p)
когда находишь длины сторон, поставь mod или abs (не помню, ну общем можно и самому написать функцию, возвращающую |x|(модуль) )))))
А хотя, я что то не понимаю, где там может быть отрицательное значение????
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 11.3.2010, 18:01
Сообщение #5


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



да фиг его знает, когда вводишь а(1,1) b(-1,1) c(0,-1) выдает ошибку что значение под корнем отрицательное, хотя по формуле ничего подобного нет.

Сделал вот так вроде работает, только фиг его знает правильно считает или нет (IMG:style_emoticons/default/biggrin.gif)
Попробую такую сдать.

# include <iostream.h>
# include <stdio.h>
# include <math.h>

int main()

{
int x1,x2,x3,y1,y2,y3;
double s,p,pp,a,b,c;
cout<<"\n Лабораторная работа №1";
cout<<"\n ";
cout<<"\n Введите x1="; cin>>x1;
cout<<" Ввидите y1="; cin>>y1;
cout<<" Введите x2="; cin>>x2;
cout<<" Ввидите y2="; cin>>y2;
cout<<" Ввидите x3="; cin>>x3;
cout<<" Ввидите y3="; cin>>y3;
a = sqrt (abs (((x1-x2)^2+(y1-y2)^2)));
b = sqrt (abs (((x1-x3)^2+(y1-y3)^2)));
c = sqrt (abs (((x2-x3)^2+(y2-y3)^2)));
p = a+b+c;
cout<<"\n p=" <<p;
pp=p/2;
//Формула Герона
s=sqrt(pp*(pp-a)*(pp- b )*(pp-c));
cout<<"\n s=" <<s;
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimka
сообщение 11.3.2010, 18:20
Сообщение #6


Доцент
******

Группа: Преподаватели
Сообщений: 4 925
Регистрация: 26.2.2007
Город: _
Вы: другое



выведите на экран промежуточные значения a,b,c,p
abs- зачем используете?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 11.3.2010, 18:37
Сообщение #7


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



без abs выдает ошибку что значение под корнем отрицательное хотя это не так.
p и так выводит это по условию надо найти. вот с a b c еще

# include <iostream.h>
# include <stdio.h>
# include <math.h>

int main()

{
int x1,x2,x3,y1,y2,y3;
double s,p,pp,a,b,c;
cout<<"\n Лабораторная работа № 1";
cout<<"\n Вариант № 21";
cout<<"\n ";
cout<<"\n Введите x1="; cin>>x1;
cout<<" Ввидите y1="; cin>>y1;
cout<<" Введите x2="; cin>>x2;
cout<<" Ввидите y2="; cin>>y2;
cout<<" Ввидите x3="; cin>>x3;
cout<<" Ввидите y3="; cin>>y3;
a = sqrt (abs (((x1-x2)^2+(y1-y2)^2))); cout<<" a=" <<a ;
b = sqrt (abs (((x1-x3)^2+(y1-y3)^2))); cout<<"\n b=" <<b ;
c = sqrt (abs (((x2-x3)^2+(y2-y3)^2))); cout<<"\n c=" <<c ;
p = a+b+c;
cout<<"\n p=" <<p;
pp=p/2;
//Формула Герона
s=sqrt(pp*(pp-a)*(pp- b )*(pp-c));
cout<<"\n s=" <<s;
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimka
сообщение 11.3.2010, 18:46
Сообщение #8


Доцент
******

Группа: Преподаватели
Сообщений: 4 925
Регистрация: 26.2.2007
Город: _
Вы: другое



да Вы не для меня выводите эти значения, а для себя.
Если без abs выдает "под корнем отрицательное значение",
sqrt ( (((x1-x2)^2+(y1-y2)^2)) )

то нужно вывести значение выражения, под корнем и проверить его на отрицательность. Если оно действительно отрицательно, значит или Вы что-то не то делаете или система считает неправильно
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 11.3.2010, 19:09
Сообщение #9


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Да я знаю что не для вас, не надо так сурово (:

как исправить ошибку function "sqr" should have a prototype;
здесь.
aa= sqr (x2-x3);
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimka
сообщение 11.3.2010, 19:34
Сообщение #10


Доцент
******

Группа: Преподаватели
Сообщений: 4 925
Регистрация: 26.2.2007
Город: _
Вы: другое



sqr что ознгачает?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 11.3.2010, 19:35
Сообщение #11


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



возведение в квадрат.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
граф Монте-Кристо
сообщение 11.3.2010, 19:42
Сообщение #12


Доцент
******

Группа: Преподаватели
Сообщений: 3 840
Регистрация: 27.9.2007
Из: Старый Оскол
Город: Москва
Учебное заведение: МФТИ/МАИ
Вы: другое



Видимо, в math.h нету такой функции. Можно написать её самому, либо вместо sqr(x) писать x*x. Можно ещё поюзать pow, но она работать будет дольше,чем x*x.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 11.3.2010, 19:51
Сообщение #13


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



я в принципе и хотел написать в виде х*х, просо с sqr (х) короче и аккуратнее бы получилось ну ладно напишу х*х
вот конечный вариант, щас все вроде правильно, ошибка была в том что она не понимала ^2 (и sqr) пришлось писать х*х

# include <iostream.h>
# include <stdio.h>
# include <math.h>

int main()

{
int x1,x2,x3,y1,y2,y3;
double s,p,pp,a,b,c,aa;
cout<<"\n Лабораторная работа № 1";
cout<<"\n ";
cout<<"\n Введите x1="; cin>>x1;
cout<<" Ввидите y1="; cin>>y1;
cout<<" Введите x2="; cin>>x2;
cout<<" Ввидите y2="; cin>>y2;
cout<<" Ввидите x3="; cin>>x3;
cout<<" Ввидите y3="; cin>>y3;
a = sqrt (((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2))); cout<<" a=" <<a ;
b = sqrt (((x1-x3)*(x1-x3))+((y1-y3)*(y1-y3))); cout<<"\n b=" <<b ;
c = sqrt (((x2-x3)*(x2-x3))+((y2-y3)*(y2-y3))); cout<<"\n c=" <<c ;
p = a+b+c;
cout<<"\n p=" <<p;
pp=p/2;
//Формула Герона
s=sqrt(pp*(pp-a)*(pp- b )*(pp-c));
cout<<"\n s=" <<s;
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimka
сообщение 11.3.2010, 19:54
Сообщение #14


Доцент
******

Группа: Преподаватели
Сообщений: 4 925
Регистрация: 26.2.2007
Город: _
Вы: другое



на счётах быстрее посчитаешь площадь. Уже 2 часа идет отладка программы
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 11.3.2010, 19:59
Сообщение #15


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



(IMG:style_emoticons/default/biggrin.gif)
если бы я лучше знал язык я бы может и после первой подсказки сделал все.
да и интернет форум куда медленнее для общения чем хотя бы icq
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 12.3.2010, 17:36
Сообщение #16


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



Лаба №2

Определить, является ли последовательность из N произвольных чисел знакочереду-
ющейся.


Честно говоря, чот нет идей никаких. За окончание последовательности возьмем 0. А дальше чот даже не знаю с чего начать.

Шаблон:

# include <iostream.h>
# include <stdio.h>
# include <math.h>

int main()

{
int a;
cout<<"\n Лабораторная работа № 2";
cout<<"\n ";
cout<<"\n Введите элемент последовательности (конец последовательности - 0 -)";
cout<<"\n "; cin>>a;
cout<<"\n ";
while (a != 0);
{ ...
ыыы
...
cout <<"Последовательность знакочередующаяся";
cout <<"Последовательность не знакочередующаяся";
}
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 12.3.2010, 19:54
Сообщение #17


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



Цитата(InFuz @ 12.3.2010, 17:36) *

Лаба №2

Определить, является ли последовательность из N произвольных чисел знакочередующейся.

Честно говоря, чот нет идей никаких. За окончание последовательности возьмем 0. А дальше чот даже не знаю с чего начать.


Код
# include <iostream>
# include <stdio.h>
# include <conio.h>

using namespace std;

int main()
{

    int a,b=0;
    bool alter=true;
    _wsetlocale(LC_ALL,L"Russian");
    cout<<"\n Лабораторная работа № 2";
    cout<<"\n ";
    cout<<"\n Введите элемент последовательности (конец последовательности - 0 -)";
    cout<<"\n "; cin>>a;
    while (a != 0)
    {
        if((a*b)>0)
        {
            alter=false;
        }
        b=a;
        cout<<"\n Введите элемент последовательности (конец последовательности - 0 -)";
        cout<<"\n "; cin>>a;
    }
    if(alter) cout <<"Последовательность знакочередующаяся";
    else cout <<"Последовательность не знакочередующаяся";
    getch();
    return 0;
}


Компилил в студии (Microsoft Visual Studio 2008), посему дам несколько комментариев:

1. # include <iostream> - <iostream.h> у меня студия просто не нашла, либо я что-то не так делаю, либо это и впрям устаревший заголовочный файл.

2. using namespace std; - обязательно, как без него работала прошлая лаба, удивляюсь.

3. _wsetlocale(LC_ALL,L"Russian"); - без этой строчки у меня, лично, бракозябри в консоли вместо русского языка.

4. getch() - ждёт ввода символа, добавил, чтобы можно было смотреть результат работы. Хотя, конечно, этого можно добиться и запуская по Ctrl+F5 в студии, наверное, и в вашей среде, если она отличается, есть что-то такое.

5. #include <conio.h> - нужно для работы getch();



Ещё какие-то комментарии нужны?
Кстати, на какой специальности учитесь? Что-то связанное с информатикой/программированием/ИТ или нет?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 12.3.2010, 21:06
Сообщение #18


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



я компилю в borland c++ 3.1 т.к. и сдавать лабы нужно в ней.
подредактировал под свой компилятор, вроде работает все норм, спасибо вам

# include <iostream.h>
# include <stdio.h>
# include <math.h>

int main()
{
int a,b=0,alter=1;
cout<<"\n Лабораторная работа № 2";
cout<<"\n ";
cout<<"\n Введите элемент последовательности (конец последовательности - 0 -)";
cout<<"\n"; cin>>a;
while (a != 0)
{
if((a*b )>0) //не понял как тут работает ведь b=0 и a*b всегда будет 0
{
alter=0;
}
b=a;
cin>>a;
}
if(alter) cout <<"Последовательность знакочередующаяся";
else cout <<"Последовательность не знакочередующаяся";
}

using namespace std; - обязательно, как без него работала прошлая лаба, удивляюсь.
это издержки моего компилятора.

Кстати, на какой специальности учитесь? Что-то связанное с информатикой/программированием/ИТ или нет?
да "Прикладная математика и информатика", в 1 семестре изучали Pascal (хотя и сейчас продолжаем), я его еще по школе более менее знал, так что с ним особых проблем небыло, а вот во 2 семестре еще C++ добавилось, вот учу потихоньку.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 12.3.2010, 21:32
Сообщение #19


Аспирант
***

Группа: Продвинутые
Сообщений: 334
Регистрация: 26.4.2009
Город: Липецк
Учебное заведение: ЛГТУ
Вы: студент



Цитата(InFuz @ 12.3.2010, 21:06) *

да "Прикладная математика и информатика"

Тогда больше готового кода не будет, только подсказки))

Цитата(InFuz @ 12.3.2010, 21:06) *

if((a*b )>0) //не понял как тут работает ведь b=0 и a*b всегда будет 0


Чуть ниже есть строчка b=a;, она и меняет значение. Суть вот в чём. Мы каждую итерацию "запоминаем" значение предыдущего элемента в b.
В следующей итерации проверяем положительность произведения a*b - если произведение положительно, то предыдущий и текущий элемент одного знака - выставляем флаг и, фактически, дальше программу можно не выполнять.

Если же все произведения были неположительными (0 допустим для 1-й итерации, когда b=0), то флаг alter так и останется true, в конце выводится Последовательность знакочередующаяся. Если же хоть одно произведение было положительным, мы не можем считать такую последовательность положительной и выводим Последовательность не знакочередующаяся.

Кстати, зачем bool убрали? Судя по cin, cout используется STL. Раз используется STL - перед нами C++. Раз C++, то bool абсолютно корректен. Хотя... Вам виднее) Не видел я эту версию борланда и ничего утверждать не берусь)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 13.3.2010, 9:56
Сообщение #20


Студент
**

Группа: Продвинутые
Сообщений: 116
Регистрация: 13.10.2009
Город: Ульяновск
Учебное заведение: УлГУ
Вы: студент



ясно, первая итерация как бы проходит в холостую (т.к. один элемент не является еще последовательностью).

да это С++, хотя # include <iostream.h> и отсутствие using namespace это как в С

в 3.1 нет типа bool как такового он появляется в версиях 5 и старше, так что приходится в место него использовать тип целых чисел где 0=false, а 1=true.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

3 страниц V  1 2 3 >
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 19.4.2024, 9:11

Книжки в помощь: "Сборник заданий по высшей математике" Кузнецов Л.А., "Сборник заданий по высшей математике" Чудесенко В.Ф., "Индивидуальные задания по высшей математике" Рябушко А.П., и другие.




Зеркало сайта Решебник.Ру - reshebnik.org.ru