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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2010, 00:37   #1
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию С++: работа с классами

Всем привет
Есть такое задание: посчитать число точек, находящиеся внутри круга радиусом r с центром в точке с координатами (1,1); координаты заданы массивами X(10), Y(10).

Все-бы то ничего, и задание понятно, но работа с классами... Что это я прочитал, толком ничего так и не понял, и как их правильно применять тоже. Написал (и то не сам) вот такой вот кошмар:
Код:
#include <iostream.h>
#include <math.h>



int main()

{
    float x[10], y[10];
    x[0]=-3; y[0]=5;
    x[1]=4; y[1]=3;

        class TPoint
        {
            float x,y;
        }
    int main ()
    {
        TPoint Points [10];
        float r;
        Points [0].x=-3; Points [0].y=5;


        cin>>r;
    int i;
    for (i=0; i<10; i++)
    {
        float x=Points[i].x;
        float y=Points[i].y;
        float L=sqrt((x-1)(x-1)+(y-1)(y-1);

        cout <<"To4ka N"<<i<<"z koord x="<<x<<"y"<<y;
        if (L<r)
        cout <<"U koli\n";

        else
        cout <<"za kolom\n";
    }

    }

    return (0);
}
Для меня тут многое не понятно, и класс, кажется, не правильно выполнен. Поэтому прошу помочь знающих людей, тыкнуть носом в ошибки и помочь исправить.

Заранее благодарю
MR_Andrew вне форума Ответить с цитированием
Старый 25.03.2010, 00:52   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Если уж координаты заданы массивами, то, наверное, не предполагается засовывать их пары в класс (хотя зачастую это бывает удобно и правильно). Я бы сделал здесь класс окружности. Соответственно, в нем конструктор, координаты центра, радиус, функция, проверяющая, находится ли какая-либо точка внутри этой окружности.
Код:
class Circle
{
public:
Circle(double x, double y, double r);
bool PointIsInside(double xx, double yy);
private:
double X, Y;
double R;
};

Circle::Circle():
 X(x), Y(y), R(r)
 {
 }
bool Circle::PointIsInside(double xx, double yy)
 {
 //Здесь используем теорему Пифагора
 }

int main()
{
double r = 3;
Circle MyCircle(1, 1, r);
//...
}
Практически всю специфику классов в рамках данной задачи вроде бы отразил.) В дальнейшем, думаю, разобраться будет не слишком трудно.)
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 25.03.2010, 00:56   #3
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Гром
Огромное Вам спасибо! На Вашем примере постараюсь изучит хотя бы структуру классов. Тип "Private" мы вообще не использовали, нам приводили примеры только на Паблик.

Завтра вечером посижу покумекаю
MR_Andrew вне форума Ответить с цитированием
Старый 25.03.2010, 01:00   #4
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Да, еще забыл. Нашим следующим заданием является абсолютно то же самое, только уже не классом, а через структуру данных. Поэтому хотелось бы написать программу так, чтоб потом легко и просто переделать в структуру.
MR_Andrew вне форума Ответить с цитированием
Старый 25.03.2010, 01:10   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Структура в C++ - это в точности тот же класс, только его члены по умолчанию public. У класса - по умолчанию private (т.е. к ним имеют доступ только функции-члены и функции-друзья). Т.е.
Код:
struct MyType
{
//...
};
Эквивалентно следующему:
Код:
class MyType
{
public:
//...
};
И внутри структуры, и внутри класса public, private и protected можно применять по нескольку раз.
По поводу возможности переделать в структуру - можете просто сделать все данные-члены public (хотя это не рекомендуется), это и будет структура по сути.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 25.03.2010, 01:11   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

вместо class написать struct, убрать конструктор, вот тебе и структура), черт опоздал
NiCola999 вне форума Ответить с цитированием
Старый 25.03.2010, 01:13   #7
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Еще раз огромное спасибо
Сейчас надо нормально разобраться с классами, а потом уже браться за структуры. Но то, что стоит нормально понят классы, и структуры уже не вызовут никаких сложностей, это я понял. Буду еще читать литературу, потом химичить с программой
MR_Andrew вне форума Ответить с цитированием
Старый 29.03.2010, 22:19   #8
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Капец.. решил пока просто написать программу без классов, массивом. Все, вроде, вышло, кроме рандома... Застрял окончательно
Код:
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

int main()

{

   int i , j, x[10], y[10];
rand();
    double r, k;

    for (i=1; i<10; i++)
    {

x[i] = rand() % 9;
}
        for (j=1; j<10; j++)
        {


            y[j] = rand() % 9;

      }


    k=sqrt(x[i]*x[i]+y[j]*y[j]);

    cout <<"Vveite radius r";
    cin >>r;
    if (k>r) cout <<" To4ka z koord x= "<< x[i] <<" y= "<< y[j] <<" Za kolom ";
    else cout <<" To4ka z koord x= "<< x[i] <<" y= "<< y[j] <<" V koli ";
cout<<k;
    return (0);
    //SYSTEM "PAUSE";
}
Зачем мне столько библиотек - не спрашивайте, перебирал всевозможные варианты... Так ничего и не вышло... Где ошибка, чего оно не хочет заполнять?
MR_Andrew вне форума Ответить с цитированием
Старый 29.03.2010, 22:31   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Код:
    if (k>r) cout <<" To4ka z koord x= "<< x[i] <<" y= "<< y[j] <<" Za kolom ";
Может это хотя бы в цикл вставить?
Код:
for (int i = 0; i < 10; i++) etc.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 29.03.2010, 22:39   #10
MR_Andrew
Форумчанин
 
Регистрация: 05.10.2009
Сообщений: 100
По умолчанию

Код:
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>

int main()

{

   int i , j, x[10], y[10];
rand();
    double r, k;

    for (i=1; i<10; i++)
    {

x[i] = rand() % 9;
}
        for (j=1; j<10; j++)
        {


            y[j] = rand() % 9;

      }


    k=sqrt(x[i]*x[i]+y[j]*y[j]);

    cout <<"Vveite radius r";
    cin >>r;

    for (i = 0; i < 10; i++)
    {
        for (j=0; j<10; j++)
        {
    if (k>r) cout <<" To4ka z koord x= "<< x[i] <<" y= "<< y[j] <<" Za kolom ";
    if (k<r) cout <<" To4ka z koord x= "<< x[i] <<" y= "<< y[j] <<" V koli ";
        }
    }
cout<<k;
    return (0);
    //SYSTEM "PAUSE";
}
И получается полный бред... оно и выводит все в цикле (сам его туда загнал), а генерирует все равно дикие числа, а потом нормальные..
MR_Andrew вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с классами (Delphi_7) Innga Помощь студентам 4 14.01.2010 16:20
Работа с классами и объектами Shavminator Общие вопросы Delphi 7 18.12.2009 04:11
проблемма с классами ciaonataha Общие вопросы C/C++ 1 24.07.2009 18:04
работа с классами, но трабл в функциях-методах aka_faith Общие вопросы C/C++ 9 14.06.2009 22:26