Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2009, 21:48   #1
KrL^^
Пользователь
 
Регистрация: 01.10.2008
Сообщений: 12
Восклицание [C] лабораторка. Указатели на функции. Помогите исправить ошибку)

Необходимо найти сумму площадей 2-х треугольников. Задаются координаты вершины, далее находятся стороны как разность координат и по формуле Герона находим площадь. По идее нахождение сторон нужно сделать через указатель на функцию) Поправте плз. Выдает ошибку error C2440: '=' : cannot convert from 'float (__cdecl *)(float,float,float,float)' to 'float'
1> There is no context in which this conversion is possible на нахождении s1 u s2
Код:
#include "stdafx.h"
#include "stdio.h"
#include "math.h"
#include "conio.h"
float dl(float a, float b, float c, float d);
//для нахождения длины стороны. a,b,c,d координаты вершин
float S(float a1, float b1, float a2,float b2, float a3, float b3, float (*f)(float,float,float,float));
//находим площадь.a1,a2,a3,b1,b2,b3 координаты точек
int _tmain()
{
	float s,s1,s2,x1,x2,x3,x4,x5,x6,y1,y2,y3,y4,y5,y6;
	printf("Введите координаты 1-го треугольника");
	scanf_s("%f %f %f %f %f %f",&x1,&y1,&x2,&y2,&x3,&y3);
	printf("Координаты: %f %f %f %f %f %f",x1,y1,x2,y2,x3,y3);
	printf("Введите координаты 2-го треугольника");
	scanf_s("%f %f %f %f %f %f",&x4,&y4,&x5,&y5,&x6,&y6);
	printf("Координаты: %f %f %f %f %f %f",x4,y4,x5,y5,x6,y6);
	s1=(x1,y1,x2,y2,x3,y3,dl);//находим площадь 1-го треугольника
	s2=(x4,y4,x5,y5,x6,y6,dl);//второго
	printf("сумма равна %f",s1+s2);
	getch();
	return 0
}
float dl(float a, float b, float c, float d)
{
	return sqrt((a-b)*(a-b)+(c-d)*(c-d));
}
float S(float a1, float b1, float a2,float b2, float a3, float b3, float (*f)(float,float,float,float))
{	
	float l1,l2,l3,p,s;
	l1=f(a1,b1,a2,b2);//находим длину стороны
	l2=f(a2,b2,a3,b3);
	l3=f(a3,b3,a1,b1);
	p=(l1+l2+l3)/2;//полупериметр
	s=sqrt(p*(p-l1)*(p-l2)*(p-l3));// площадь по формуле Герона
	return s;
}
завтра сдавать((
KrL^^ вне форума Ответить с цитированием
Старый 11.03.2009, 22:27   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А не проще считать площадь по координатам?
Для треугольника ABC:
Код:
S = 1/2 * | (X(B) - X(A))*(Y(C) - Y(A)) - (X(C) - X(A))*(Y(B) - Y(A)) |
То есть для вашего случая функция будет выглядеть как-то так:
Код:
float S(float a1, float b1, float a2,float b2, float a3, float b3)
{	
	float s;
	s = (1/2) * fabs( (a2-a1)*(b3-b1) - (a3-a1)*(b2-b1) );
	return s;
}

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 11.03.2009 в 22:30.
Sazary вне форума Ответить с цитированием
Старый 11.03.2009, 22:33   #3
XeN0N
Форумчанин
 
Аватар для XeN0N
 
Регистрация: 18.01.2009
Сообщений: 118
По умолчанию

s1=(x1,y1,x2,y2,x3,y3,dl);
->>
s1=S(x1,y1,x2,y2,x3,y3,dl);

может так?
XeN0N вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить ошибку! samuex Microsoft Office Word 1 24.02.2009 22:05
Помогите исправить ошибку sergoss Общие вопросы Delphi 2 14.02.2009 09:59
помогите исправить ошибку. RUSLAN13 Помощь студентам 1 25.12.2008 17:22
Помогите исправить ошибку Булат Общие вопросы Delphi 3 25.04.2008 10:01