#include "stdafx.h"
#include <iostream>
#include <locale>
#include <cmath>
using namespace std;
// ф - ия вычисления периметра
double func(int *x,int *y,int a);
int main()
{
int a;// кол- во вершин
std::wcout.imbue(std::locale("Russian_russia.OCP"));
wcout<<L"\tВычисляем периметр многоугольника"<<endl;
wcout<<L"Введите количество вершин"<<endl;
cin>>a;//вводим кол-во вершин
// массивы для хранения координат вершин
int *x = new int[a];
int *y = new int[a];
for(int i = 0;i<a;++i){
cout<<"x["<<i<<"] = ";
cin>>x;
cout<<"y["<<i<<"] = ";
cin>>y;
}
// вычисляем периметр
double result = func(x,y,a);
wcout<<L"периметр = "<<result<<endl;
// освобождаем память
delete [] x;
delete [] y;
return 0;
}
double func(int *x,int *y,int a)
{
// массивы для хранения длин вычисленных
// отрезков
double *t = new double[a];
double *k = new double[a];
double *h = new double[a];
// вычисляемый результат
double res = 0;
for(int i=0;i<a;i++)
{
if(i+1!=a)
{
t=pow(x[i+1]-x,2);
k=pow(y[i+1]-y,2);
h=sqrt(t+k);
wcout<<i + 1<<L" отрезок - "<<h<<endl;
res+=h;// прибавляем отрезок к результату
wcout<<L"теекущий результат - "<<res<<endl;
}else
{
t=pow(x[0]-x,2);
k=pow(y[0]-y,2);
h=sqrt(t+k);
wcout<<i + 1<<L" отрезок - "<<h<<endl;
res+=h;// прибавляем отрезок к результату
wcout<<L"теекущий результат - "<<res<<endl;
}
}
// освобождаем память
delete [] k;
delete [] t;
delete [] h;
return res;
}
Проблема с функцией,посоветуйте...
[SIZE="3"]Вот дан мне n-угольник,надо вычислить периметр...вроде ничего сложного..только вот не идет прога...
Вот текст(если можете помогите):[/SIZE]
#include<stdio.h>
#include<conio.h>
#include<math.h>
int func(int *r,int *w,float res);
void main()
{
int a,i,x[100],y[100],t,k;
float h;
printf("BBeDuTe ko/lu4ecTBo BepLLluH:\n");
scanf("%i",&a);
for(i=0;i<a;i++)
{
if(a!=1 || a!=2)
{
printf("KoopDuHaTbl %i BepLLluHbl:\n",i+1);
printf("x[%i]=",i+1);
scanf("%i",&x);
printf("y[%i]=",i+1);
scanf("%i",&y);
}
else printf("To4ka u/lu OTpe3ok");
{
getch();
return;
}
}
printf("%i",func(*r,*w,res));
getch();
}
int func(int *r,int *w,float res)
{
int a,i,x[100],y[100],t,k;
float h;
for(i=0;i<a;i++)
{
if(i+1!=a)
{
t=pow(r[i+1]-r,2);
k=pow(w[i+1]-w,2);
h=sqrt(t+k);
}
else
{
t=pow(r[0]-r[i+1],2);
t=pow(w[0]-w[i+1],2);
h=sqrt(t+k);
}
}
res+=g;
return res;
}
//Вся прога,только вот выводит все время ошибки...третью неделю маюсь...
правила форума Студентам. За неправильное название темы, оформление кода - получаешь -15, если не исправишь тему к утру - попадешь в бан. Лично мне надоело чужии темы править, пришли на форум - будьте добры соблюдать правила форума.
Timurovic, читай
Влюбом случаии от себя хотел добавить:
Чисто техничеки необъявленая переменная r: "printf("%i",func(*r,*w,res));" и еще куча.
Чисто практически: убираешь с кода все кроме главной функции(main) компилируешь запускаешь, что бы работала.
Затем ПОНЕМНОГУ ДОБАВЛЯЕШЬ код и только так сможешь понять программирование. Если что не понятно то конретнные вопросы ты можешь задать здесь...
Удачи.
ну и как мне её поменять?
Кого её? название темы? редактировать -> расширенный режим, не забудь код оформить. название поменяется только внутри темы, снаружи заголовок я подправлю ((, когда буду на форуме.
Цитата: alexburzak
Полносстью согласен!
Влюбом случаии от себя хотел добавить:
Никто не будет за тебя решать это.
Но могу посоветовать.
Чисто техничеки необъявленая переменная r: "printf("%i",func(*r,*w,res));" и еще куча.
Чисто практически: убираешь с кода все кроме главной функции(main) компилируешь запускаешь, что бы работала.
Затем ПОНЕМНОГУ ДОБАВЛЯЕШЬ код и только так сможешь понять программирование. Если что не понятно то конретнные вопросы ты можешь задать здесь...
Удачи.
Влюбом случаии от себя хотел добавить:
Никто не будет за тебя решать это.
Но могу посоветовать.
Чисто техничеки необъявленая переменная r: "printf("%i",func(*r,*w,res));" и еще куча.
Чисто практически: убираешь с кода все кроме главной функции(main) компилируешь запускаешь, что бы работала.
Затем ПОНЕМНОГУ ДОБАВЛЯЕШЬ код и только так сможешь понять программирование. Если что не понятно то конретнные вопросы ты можешь задать здесь...
Удачи.
//
Я не прошу не кого за меня её решать,попросил только помочь...и я не кого не принуждаю...понять функцию действительно не могу(единственное пока,что я не понял из пройденного материала).
P.S.Спасибо за совет.
Цитата:
//Вся прога,только вот выводит все время ошибки...третью неделю маюсь...
мой тебе совет, закачай книгу по С, или купи Дейтела "Как программировать на С", посмотри Шилдта, у тебя столько ошибок что говорить особенно не о чем:
- использование не инициолизированных переменных
- неправильная передача параметров в функцию, более того передаются необъявленные переменные
- нету коменнтарий - логику решения проследить мягко говоря мне трудно, извини.
Спасибо Ольге.
Обьявляешь ненужные переменные,передаешь в ф-ию неизвестно что
( указатели на r и w,r и w не существуют в ф-ии main),вычисляешь что ?
Переменная g - откуда она взялась?
Тебе надо передать в ф-ию 3 параметра : два массива в которых
храняться координаты вершин,и кол-во вершин.Разберись по учебникам
с ф-ями.Что и как туда передается,что возвращается ? Передача по
ссылке,по значению,как передаются массивы и т.д.Вот подправил твое решение(Visual Studio 2003),вместо prinf,scanf использовал cout,cin и руссифицировал консоль(чтоб ты не писал англ.буквами русский тест).:)
Код: