IPB

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

> С++ нахождения площади и периметра треугольника по координатам, Переход от 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; */
}
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
Vahappaday
сообщение 31.3.2010, 16:43
Сообщение #2


Аспирант
***

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



На мой взгляд, вновь неверно... Теоретически функцию можно описывать внутри другой функции, но я не видел, чтоб к этому прибегали.

У Вас же Chislo описана внутри main.

Также советую разобраться в синтаксисе определения функции.

Код
[тип возвращаемого значения] [имя функции]([список параметров])
{
[код]
}


Никакой переменной с именем функции по умолчанию не создаётся. Все возвраты осуществляются оператором return.

Захотели вернуть 0, пишем return 0;
Захотели вернуть 1, пишем return 1;
Захотели вернуть x, пишем return x;

После выполнения оператора return выполнение функции прекращается и управление передаётся вызывающей функции.

Объявлять все локальные переменные нужно уже в теле функции, там, где у меня написано [код].

То есть, если вы всё вот этот осознаете, то поймёте, что функция описана неверно.

Остальные комментарии:
1. опять main ничего не возвращает - чего вы её так обижаете, такая же функция) Обещает отдавать int, значит, должна отдавать int))
2. Зачем int yk[99]? Зачем Вы выделили память в стеке? Вы же её не используете...
3.
Цитата
как х присвоить yk[i]?

А никак) Просто пишете
Код
Chislo(yk[i]);
и всё


Вот небольшой примерчик с оформлением функций. У меня массив статический, но Вам так нельзя, не подходит по условию статический.

Код

int IsSimple(int x)
{
    int i;
    if (x<2) return 0; //если меньше двух, дальше функция не будет выполняться
    for(i=2;i<x;i++)
    {
        if(!(x%i))
        {
            return 0; //есть делитель больший или равный двойке, но меньше числа, опять же прекращаем
        }
    }
    return 1; //делителей не нашлось, число простое
}

int main()
{
    int i;
    int x[50];
    for(i=0;i<50;i++)
    {
        cin >> x[i];
        if(IsSimple(x[i])) cout << "Prostoe\n";
        else cout << "Sostavnoe\n";
    }
    return 0; //заметьте, обещал вернуть int и вернул int
}

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
InFuz
сообщение 1.4.2010, 10:33
Сообщение #3


Студент
**

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



(i=2;i<x;i++)?
Разве может быть делителем x число которое >1/2x (например числа >5 не могут быть делителями 10)
можно сократитть количество проверок в цикле почти в 2 раза.

С функциями вроде разобрались, терь надо с дин. массивом разобраться.

yk[99] - получается статический
*(yk) - тоже не верно а как тогда?

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

//----------------------------------------------------------------
    int Chislo(int x)
    {
      int j;
      if (x<4) return 1;
      else
       {
         for (j=2; j<floor(x/2)+1; j++)
         if (x%j==0) return 0;
       }
       return 1;
    }
//-----------------------------------------------------------------
    int mani()
    {
      clrscr();
      int w,i,j,n,s,g,yk;
      cout<<"n="; cin>>n;
      yk=new int[n];
      cout<<"El-ma \n";
      for (i=0; i<n; i++)
      {
         cin>>yk[i];
         s=yk[i];
         cout<<"\n s="<<s;
         if (Chislo(yk[i])) cout<<"Prostoe\n";
         else cout<<"Sostavnoe\n";
      }
      delete []yk;
      getch();
      return 0;
    }
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Vahappaday
сообщение 1.4.2010, 18:39
Сообщение #4


Аспирант
***

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



Цитата(InFuz @ 1.4.2010, 10:33) *

(i=2;i<x;i++)?
Разве может быть делителем x число которое >1/2x (например числа >5 не могут быть делителями 10)
можно сократитть количество проверок в цикле почти в 2 раза.


Тогда уж не до x/2 а до sqrt(x), обычно делается так, не стал писать, чтоб не усложнять.

Цитата(InFuz @ 1.4.2010, 10:33) *

yk[99] - получается статический
*(yk) - тоже не верно а как тогда?


Объявлять и выделять память так:

Код
int* yk = new int[n]


Обращаться же по индексу

Код
cin>>yk[i];
s=yk[i];


Пробуйте сортировать. Для сортировки сделайте функцию, которая в качестве параметра принимает указатель на начало массива. Можно конечно qsort, но так неинтересно.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
InFuz   С++ нахождения площади и периметра треугольника по координатам   11.3.2010, 14:16
Евгений М.   Формула Герона. pp=p*0.5; s=sqrt(pp*(pp-a)*(pp- b...   11.3.2010, 15:09
InFuz   Пару вопросов. Что такое pp (p я так понимаю пирим...   11.3.2010, 16:15
Pavlov Andrey   да pp - у него это периметр, а в Героне надо полу-...   11.3.2010, 16:25
InFuz   да фиг его знает, когда вводишь а(1,1) b(-1,1) c(0...   11.3.2010, 18:01
Dimka   выведите на экран промежуточные значения a,b,c,p a...   11.3.2010, 18:20
InFuz   без abs выдает ошибку что значение под корнем отри...   11.3.2010, 18:37
Dimka   да Вы не для меня выводите эти значения, а для себ...   11.3.2010, 18:46
InFuz   Да я знаю что не для вас, не надо так сурово (: к...   11.3.2010, 19:09
Dimka   sqr что ознгачает?   11.3.2010, 19:34
InFuz   возведение в квадрат.   11.3.2010, 19:35
граф Монте-Кристо   Видимо, в math.h нету такой функции. Можно написат...   11.3.2010, 19:42
InFuz   я в принципе и хотел написать в виде х*х, просо с ...   11.3.2010, 19:51
Dimka   на счётах быстрее посчитаешь площадь. Уже 2 часа и...   11.3.2010, 19:54
InFuz   :D если бы я лучше знал язык я бы может и после пе...   11.3.2010, 19:59
InFuz   [b]Лаба №2 [b]Определить, является ли последовате...   12.3.2010, 17:36
Vahappaday   [size=3][b]Лаба №2 [b]Определить, является ли по...   12.3.2010, 19:54
InFuz   я компилю в borland c++ 3.1 т.к. и сдавать лабы ну...   12.3.2010, 21:06
Vahappaday   да [b]"Прикладная математика и информатика...   12.3.2010, 21:32
InFuz   ясно, первая итерация как бы проходит в холостую (...   13.3.2010, 9:56
Vahappaday   ясно, первая итерация как бы проходит в холостую ...   13.3.2010, 11:00
InFuz   [b]Лаба №4 [b]Дан массив целых простых чисел. Пер...   30.3.2010, 12:28
граф Монте-Кристо   a=(float *) malloe (n * sizeof(float)); //...   30.3.2010, 13:05
InFuz   :D   30.3.2010, 15:00
Vahappaday   ой... а зачем и new и malloc? и ни разу не освобож...   31.3.2010, 4:07
InFuz   Пока делаю без функций т.к. с ними еще не разобрал...   31.3.2010, 10:54
Vahappaday   ой... не нравится мне этот код. Опишу в таком поря...   31.3.2010, 14:52
InFuz   Гляньте функцию, еще хотел спросить как х присвоит...   31.3.2010, 16:18
Vahappaday   На мой взгляд, вновь неверно... Теоретически функц...   31.3.2010, 16:43
InFuz   (i=2;i<x;i++)? Разве может быть делителем x чис...   1.4.2010, 10:33
Vahappaday   [b](i=2;i<x;i++)? Разве может быть делителем x...   1.4.2010, 18:39
InFuz   Вот отлаженный вариант # include <iostream.h...   2.4.2010, 14:38
InFuz   # include <iostream.h> # include <stdi...   2.4.2010, 14:52
Vahappaday   qsort - быстрая сортировка, хороший алгоритм, вопр...   2.4.2010, 16:26
InFuz   Чот не знаю как пузырек оформить в виде функции, е...   2.4.2010, 17:09
Vahappaday   Хочу в функции сортировки сделать копию массива с...   2.4.2010, 19:30
InFuz   Вот пузырек реалезованый не как функция. # includ...   2.4.2010, 21:45
Vahappaday   а в чём проблема реализации как функции? Ведь то ж...   3.4.2010, 5:13
InFuz   j=j+1; не знаю наверно привычка с паскаля еще так...   3.4.2010, 9:21
Vahappaday   В функцию нужно передавать весь массив, а не один ...   3.4.2010, 13:34
InFuz   [color=#FF0000]Final [code]# include <iostrea...   6.4.2010, 9:08
Vahappaday   Ответ: конкретно так работать не будет, потому что...   6.4.2010, 13:32
InFuz   Ну вот тот что сверху полностью рабочий вариант, в...   6.4.2010, 19:13
InFuz   [b]Лаба №6 [b]Создать двоичный файл и записать в...   20.4.2010, 14:38
Vahappaday   Нет, все числа из файла, удовлетворяющие условию, ...   20.4.2010, 15:36
InFuz   А я понял, вроде. Надо из файла брать (и добавлять...   20.4.2010, 16:33
Vahappaday   да, только сначала для расчёта условий надо сначал...   20.4.2010, 18:27
InFuz   Гляньте пожалуйста вроде должна работать, но чот н...   21.4.2010, 12:17
Vahappaday   Есть много комментариев по 2 части. Зачем записыв...   21.4.2010, 16:03
InFuz   Все исправил, заработала. Гляньте еще одну прогу....   22.4.2010, 12:46
Vahappaday   return (sym/s); - опять то же самое)) Результат-то...   22.4.2010, 13:53
InFuz   Результат-то будет типа double ну так и функция ти...   22.4.2010, 17:17
Vahappaday   Советую повнимательнее взглянуть сюда: return (sym...   22.4.2010, 20:29
InFuz   Все, готово, кое как своими кривыми ручонками отла...   23.4.2010, 19:07
Vahappaday   А с делением поправили?))) Косячить ведь будет)   23.4.2010, 19:47
InFuz   так точно! сделал еще печать в самой процедуре...   23.4.2010, 21:37
Vahappaday   Если честно, не в курсе, это чисто борландовое пре...   23.4.2010, 22:37


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

 



- Текстовая версия Сейчас: 8.5.2024, 19:26

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




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