![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
InFuz |
![]()
Сообщение
#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; */ } |
![]() ![]() |
Евгений М. |
![]()
Сообщение
#2
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 199 Регистрация: 6.11.2009 Город: Уфа Вы: студент ![]() |
Формула Герона.
pp=p*0.5; s=sqrt(pp*(pp-a)*(pp- b )*(pp-c)); Не забудьте объявить pp как double. |
InFuz |
![]()
Сообщение
#3
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
Пару вопросов.
Что такое pp (p я так понимаю пириметр). И как избавиться от ошибки когда вычисляется a, b, c и значение под корнем становиться отрицательным, например для треугольника а(1,1) b(-1,1) c(0,-1). |
Pavlov Andrey |
![]()
Сообщение
#4
|
Школьник ![]() Группа: Продвинутые Сообщений: 20 Регистрация: 7.5.2009 Город: Москва ![]() |
да pp - у него это периметр, а в Героне надо полу-периметр(p)
когда находишь длины сторон, поставь mod или abs (не помню, ну общем можно и самому написать функцию, возвращающую |x|(модуль) ))))) А хотя, я что то не понимаю, где там может быть отрицательное значение???? |
InFuz |
![]()
Сообщение
#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 |
![]()
Сообщение
#6
|
Доцент ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 4 925 Регистрация: 26.2.2007 Город: _ Вы: другое ![]() |
выведите на экран промежуточные значения a,b,c,p
abs- зачем используете? |
InFuz |
![]()
Сообщение
#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 |
![]()
Сообщение
#8
|
Доцент ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 4 925 Регистрация: 26.2.2007 Город: _ Вы: другое ![]() |
да Вы не для меня выводите эти значения, а для себя.
Если без abs выдает "под корнем отрицательное значение", sqrt ( (((x1-x2)^2+(y1-y2)^2)) ) то нужно вывести значение выражения, под корнем и проверить его на отрицательность. Если оно действительно отрицательно, значит или Вы что-то не то делаете или система считает неправильно |
InFuz |
![]()
Сообщение
#9
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
Да я знаю что не для вас, не надо так сурово (:
как исправить ошибку function "sqr" should have a prototype; здесь. aa= sqr (x2-x3); |
Dimka |
![]()
Сообщение
#10
|
Доцент ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 4 925 Регистрация: 26.2.2007 Город: _ Вы: другое ![]() |
sqr что ознгачает?
|
InFuz |
![]()
Сообщение
#11
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
возведение в квадрат.
|
граф Монте-Кристо |
![]()
Сообщение
#12
|
Доцент ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 3 840 Регистрация: 27.9.2007 Из: Старый Оскол Город: Москва Учебное заведение: МФТИ/МАИ Вы: другое ![]() |
Видимо, в math.h нету такой функции. Можно написать её самому, либо вместо sqr(x) писать x*x. Можно ещё поюзать pow, но она работать будет дольше,чем x*x.
|
InFuz |
![]()
Сообщение
#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 |
![]()
Сообщение
#14
|
Доцент ![]() ![]() ![]() ![]() ![]() ![]() Группа: Преподаватели Сообщений: 4 925 Регистрация: 26.2.2007 Город: _ Вы: другое ![]() |
на счётах быстрее посчитаешь площадь. Уже 2 часа идет отладка программы
|
InFuz |
![]()
Сообщение
#15
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
(IMG:style_emoticons/default/biggrin.gif)
если бы я лучше знал язык я бы может и после первой подсказки сделал все. да и интернет форум куда медленнее для общения чем хотя бы icq |
InFuz |
![]()
Сообщение
#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 |
![]()
Сообщение
#17
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
Лаба №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 |
![]()
Сообщение
#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 |
![]()
Сообщение
#19
|
Аспирант ![]() ![]() ![]() Группа: Продвинутые Сообщений: 334 Регистрация: 26.4.2009 Город: Липецк Учебное заведение: ЛГТУ Вы: студент ![]() |
да "Прикладная математика и информатика" Тогда больше готового кода не будет, только подсказки)) 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 |
![]()
Сообщение
#20
|
Студент ![]() ![]() Группа: Продвинутые Сообщений: 116 Регистрация: 13.10.2009 Город: Ульяновск Учебное заведение: УлГУ Вы: студент ![]() |
ясно, первая итерация как бы проходит в холостую (т.к. один элемент не является еще последовательностью).
да это С++, хотя # include <iostream.h> и отсутствие using namespace это как в С в 3.1 нет типа bool как такового он появляется в версиях 5 и старше, так что приходится в место него использовать тип целых чисел где 0=false, а 1=true. |
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 25.5.2025, 20:22 |
Зеркало сайта Решебник.Ру - reshebnik.org.ru