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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 08.12.2013, 19:51   #1
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Здравствуйте!Помогите пожалуйста с программой.
Задание:
Определить периметры треугольников, заданных координатами их вершин
XA(5), XB(5), XC(5),(координаты в массиве)
YA(5), YB(5), YC(5)
Длину стороны треугольников вычислять в подпрограмме


Немного написал код,но не знаю правилен ли он(компилятор выдает ошибку):
Код:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
double treyg();
void main()
{
int xa[5],ya[5],xb[5],yb[5],xz[5],yz[5],i,a,b,c;
for (i=0; i<6;i++)
{
xa[i]=rand()% 100;
ya[i]=rand()% 100;
xb[i]=rand()% 100;
yb[i]=rand()% 100;
xz[i]=rand()% 100;
yz[i]=rand()% 100;
cout <<"xa:";
cout << xa[i]<<' ';cout <<"\t ";
cout <<"ya:";
cout << ya[i]<<' '; cout <<"\t ";
cout <<"xb:";
cout << xb[i]<<' ';cout <<"\t ";
cout <<"yb:";
cout << yb[i]<<' '; cout <<"\t ";
cout <<"xz:";
cout << xz[i]<<' '; cout <<"\t ";
cout <<"yz:";
cout << yz[i]<<' '; cout <<"\n ";
}
puts("\n\t Function =");
 treyg(a,b,c);
p=a+b+z;
cout<<"Perimetr treygolnika = "<<p<<endl;
cout <<"\n ";
puts("\n Press any key ... ");
getch();
}
double treyg()
{
a=sqrt(sqr(xa[i]-xb[i])+sqr(ya[i]-yb[i]));
b=sqrt(sqr(xb[i]-xz[i])+sqr(yb[i]-yz[i]));
z=sqrt(sqr(xa[i]-xz[i])+sqr(ya[i]-yz[i]));
}

Последний раз редактировалось Stilet; 09.12.2013 в 12:46.
spectrum988 вне форума
Старый 09.12.2013, 00:30   #2
_Freak_
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 25
По умолчанию

У тебя функция объявлена как:
Цитата:
double treyg();
А ты вызываешь её:
Цитата:
treyg(a,b,c);
_Freak_ вне форума
Старый 09.12.2013, 00:39   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

А что должно произойти после
Код:
 treyg(a,b,c);
?
В Си нет процедур, только функции.
Подпрограмма - имелось ввиду наверное вычисление одной стороны.
И a,b,c - лучше double. По теореме Пифагора редко так повезет, что будет целое расстояние между точками.
type_Oleg вне форума
Старый 09.12.2013, 00:43   #4
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

А толку мне вычислять в подпрограмме только одну сторону,если мне нужно 3-и чтобы найти периметр!Спасибо!

Код:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
double treyg(double a,double b,double z);
void main()
{
int xa[5],ya[5],xb[5],yb[5],xz[5],yz[5],i,a,b,z,p;
for (i=0; i<6;i++)
{
xa[i]=rand()% 100;
ya[i]=rand()% 100;
xb[i]=rand()% 100;
yb[i]=rand()% 100;
xz[i]=rand()% 100;
yz[i]=rand()% 100;
cout <<"xa:";
cout << xa[i]<<' ';cout <<"\t ";
cout <<"ya:";
cout << ya[i]<<' '; cout <<"\t ";
cout <<"xb:";
cout << xb[i]<<' ';cout <<"\t ";
cout <<"yb:";
cout << yb[i]<<' '; cout <<"\t ";
cout <<"xz:";
cout << xz[i]<<' '; cout <<"\t ";
cout <<"yz:";
cout << yz[i]<<' '; cout <<"\n ";
}
puts("\n\t Function =");
 treyg(a,b,z);
p=a+b+z;
cout<<"Perimetr treygolnika = "<<p<<endl;
cout <<"\n ";
puts("\n Press any key ... ");
getch();
}
double treyg(double a,double b,double z)
{
a=sqrt(sqr(xa[i]-xb[i])+sqr(ya[i]-yb[i]));
b=sqrt(sqr(xb[i]-xz[i])+sqr(yb[i]-yz[i]));
z=sqrt(sqr(xa[i]-xz[i])+sqr(ya[i]-yz[i]));
}
Ошибку в самой функции выбивает!Поправьте пожалуйста код,срочно нужно решить задачу!

Последний раз редактировалось Stilet; 09.12.2013 в 12:49.
spectrum988 вне форума
Старый 09.12.2013, 00:52   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Повторяю вопрос: что ожидаешь от вызова treyg(a,b,z); ?
То, что в a,b,z будут длины сторон ? Не дождешься. Останется то же, что было до вызова.
См. " Передача параметров по значению"
type_Oleg вне форума
Старый 09.12.2013, 01:03   #6
_Freak_
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 25
По умолчанию

Ошибку выбивает по тому, что xa, ya, xb, yb, xc, yc объявлены локально в функции main и по этому функция treyg о них ничего не знает. Переменная i, используемая для индексации, из той же оперы

И вообще, функция, которая вычисляет расстояние между двумя точками выглядит так:
Код:
float length(float x1, float y1, float x2, float y2)
{
	return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
}

Последний раз редактировалось Stilet; 09.12.2013 в 12:54.
_Freak_ вне форума
Старый 09.12.2013, 01:16   #7
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Используйте функцию как функцию. Вот эту
Код:
double dlina(int x1, int y1, int x2, int y2)
{ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); }
Вот так
Код:
 p=dlina(xa[i],ya[i],xb[i],yb[i])+dlina(xa[i],ya[i],xz[i],yz[i])
 +dlina(xb[i],yb[i],xz[i],yz[i]);
И a,b,z,p выкинуть из объявления в начале.

PS Исправил: double p - надо в начале объявить. От греха подальше..

Последний раз редактировалось type_Oleg; 09.12.2013 в 01:27.
type_Oleg вне форума
Старый 09.12.2013, 11:25   #8
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

а 2 другие стороны мне находить аналогично ?!
sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

Вот так:
Код:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
double dlina(int xa,int ya,int xb,int yb,int xz,int yz);
void main()
{
int xa[5],ya[5],xb[5],yb[5],xz[5],yz[5],i;
for (i=0; i<6;i++)
{
xa[i]=rand()% 100;
ya[i]=rand()% 100;
xb[i]=rand()% 100;
yb[i]=rand()% 100;
xz[i]=rand()% 100;
yz[i]=rand()% 100;
cout <<"xa:";
cout << xa[i]<<' ';cout <<"\t ";
cout <<"ya:";
cout << ya[i]<<' '; cout <<"\t ";
cout <<"xb:";
cout << xb[i]<<' ';cout <<"\t ";
cout <<"yb:";
cout << yb[i]<<' '; cout <<"\t ";
cout <<"xz:";
cout << xz[i]<<' '; cout <<"\t ";
cout <<"yz:";
cout << yz[i]<<' '; cout <<"\n ";
}
double p;
puts("\n\t Function =");
 dlina(xa,ya,xb,yb,xz,yz);
p=dlina(xa[i],ya[i],xb[i],yb[i])+dlina(xa[i],ya[i],xz[i],yz[i])+dlina(xb[i],yb[i],xz[i],yz[i]);
cout<<"Perimetr treygolnika = "<<p<<endl;
cout <<"\n ";
system("pause");
getch();
}
double dlina(int xa,int ya,int xb,int yb,int xz,int yz)
{
return
sqrt(pow((xa[i]-xb[i]),2)+pow((ya[i]-yb[i]),2));
sqrt(pow((xb[i]-xz[i]),2)+pow((yb[i]-yz[i]),2));
sqrt(pow((xa[i]-xz[i]),2)+pow((ya[i]-yz[i]),2));

}
Или же для нахождения каждой стороны сделать функцию для каждой!

Код:
...........
double dlinaa(int xa,int ya,int xb,int yb);
double dlinab(int xb,int yb,int xz,int yz);
double dlinaz(int xa,int ya,int xz,int yz);
{.........
.....
.......
}
double p;
puts("\n\t Function =");
 dlinaa(xa,ya,xb,yb);
 dlinab(xa,ya,xz,yz);
 dlinaz(xb,yb,xz,yz);
p=dlinaa(xa[i],ya[i],xb[i],yb[i])+dlinab(xa[i],ya[i],xz[i],yz[i])+dlinaz(xb[i],yb[i],xz[i],yz[i]);
cout<<"Perimetr treygolnika = "<<p<<endl;
cout <<"\n ";
system("pause");
getch();
}
double dlinaa(int xa,int ya,int xb,int yb)
{
return
sqrt(pow((xa[i]-xb[i]),2)+pow((ya[i]-yb[i]),2));
}
double dlinab(int xb,int yb,int xz,int yz)
{
return
sqrt(pow((xb[i]-xz[i]),2)+pow((yb[i]-yz[i]),2));
}
double dlinaz(int xa,int ya,int xz,int yz)
{
return
sqrt(pow((xa[i]-xz[i]),2)+pow((ya[i]-yz[i]),2));
}

Последний раз редактировалось Stilet; 09.12.2013 в 12:57.
spectrum988 вне форума
Старый 09.12.2013, 17:34   #9
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Ну не могу понять,что делаю не так!
spectrum988 вне форума
Старый 09.12.2013, 17:34   #10
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

У вас же сказано "Определить периметры треугольников" И все !
То есть сумму длин сторон. Одна строка
Код:
p=dlina(xa[i],ya[i],xb[i],yb[i])+dlina(xa[i],ya[i],xz[i],yz[i])+dlina(xb[i],yb[i],xz[i],yz[i]);
И определение одной функции dlina
Остальное у вас - зачем нужно?

Мне кажется, вы совершенно не понимаете, что такое функция.
type_Oleg вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с программой С++ Builder spectrum988 C++ Builder 10 25.10.2013 01:15
Управление STM8S-Discovery программой на C++ Builder ShevlyakoV Общие вопросы C/C++ 3 10.12.2012 19:26
Процесс после завершения работы с программой остается в диспетчере зедач с++ builder romec1 Помощь студентам 0 09.06.2010 14:07
Помогите с программой Borland C++ Builder 6.0 Vikelf Помощь студентам 1 15.05.2009 15:09