Форум программистов, компьютерный форум CyberForum.ru

Структурированный в объектно-ориентированный - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
19.07.2011, 19:53     Структурированный в объектно-ориентированный #1
Доброго времени суток!
В чем собственно моя проблема. Есть задание курсовой роботы (миниатюры), есть исходник программы написанный мною (прилагаю). Но программу надо написать двумя способами, используя структурированный подход и объектно-ориентированный. Со структурированным я вроде справился, хотя если есть тут проблемы или вопросы просьба ткнуть носом. Как мне переделать программу во второй способ, кто что подскажет?
Заранее спасибо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream> 
using namespace std;
 
int E1, E2;
float r1=30.6, r2=3.25, r3=20.57;
 
float J2()
{
 return (E1/(r1+((r2*r3)/(r2+r3))))*(r3/(r2+r3))-(E2/(r2+(r1*r3/(r1+r3))));
}
 
float J3()
{
 return (E1/(r1+((r2*r3)/(r2+r3))))*(r3/(r2+r3))+(E2/(r2+(r1*r3/(r1+r3))))*(r1/(r1+r3));
}
 
float J1()
{
 return J2()+J3();
}
 
void main()
{
 cout<<"  Tablica zavicimosti J1,J2,J3 ot E1,E2  \n";
 cout<<"|----|----|-----------------------------|\n";
 cout<<"| E1 | E2 |     J2       J3       J1    \n";
 for(E1=10, E2=15; E1<=100, E2<=60; E1+=10, E2+=5)
 {
  cout<<"|----|----|-----------------------------|\n";
  cout<<"| "<<E1<<" | "<<E2<<" | "<<J2()<<"  "<<J3()<<"  "<<J1()<<"\n";
 }
 cout<<"|----|----|-----------------------------|\n";
 system("pause");
}
Миниатюры
Структурированный в объектно-ориентированный  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2011, 19:53     Структурированный в объектно-ориентированный
Посмотрите здесь:

объектно-ориентированный анализ,объектно-ориентированное проектирование C++
Определить структурированный тип, набор функций (в виде меню) для работы с массивом структур C++
Объектно-ориентированный C++ и другие языки C++
Объектно-ориентированный анализ и проектирование с примерами приложений C++
Дан ориентированный граф, нужно на выходе получить матрицу кратчайших путей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
25.08.2011, 06:17     Структурированный в объектно-ориентированный #21
Цитата Сообщение от footbaler Посмотреть сообщение
на строчку
C++
1
std::back_inserter(res_I_for_I_ind)
, говорит - is not a member of 'std' и identifier not found.
Надо еще включить
C++
1
#include <iterator>
У меня, правда, на MSVS 2008 и так работает.

Добавлено через 5 минут
Цитата Сообщение от footbaler Посмотреть сообщение
То есть, это ошибка в курсовой
Ну, если вы делаете точно по методичке, то да.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
25.08.2011, 21:59  [ТС]     Структурированный в объектно-ориентированный #22
Mr.X, спасибо за помощь, буду разбираться.

Добавлено через 14 минут
только что посмотрел, нашел у себя в программе ошибку, в выражении, при расчете J3. Там в одном месте, вместо r2 у меня стояла r3. Теперь моя программа считает так же как ваша! Еще раз спасибо!
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
29.08.2011, 01:41  [ТС]     Структурированный в объектно-ориентированный #23
Возник очередной вопрос...
Вот код первого варианта (используя структурированный подход):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "stdafx.h"
#include <iomanip>
#include <iostream>
 
double J2(int E1, int E2, float r1, float r2, float r3)
{
    return (E1/(r1+((r2*r3)/(r2+r3))))*(r3/(r2+r3))-(E2/(r2+(r1*r3/(r1+r3))));
}
 
double J3(int E1, int E2, float r1, float r2, float r3)
{
    return (E1/(r1+((r2*r3)/(r2+r3))))*(r2/(r2+r3))+(E2/(r2+(r1*r3/(r1+r3))))*(r1/(r1+r3));
}
 
double J1(int E1, int E2, float r1, float r2, float r3)
{
    return J2(E1, E2, r1, r2, r3)+J3(E1, E2, r1, r2, r3);
}
 
int main()
{
    int v, E1, E2;
    float r1 = 30.6, r2 = 3.25, r3 = 20.57;
    setlocale(LC_ALL, "Russian");
    for(;;)
    {
        std::cout << "\n1. Таблица зависимости J1 от E1 i E2\n"
                     "2. Таблица зависимости J2 от E1 i E2\n"
                     "3. Таблица зависимости J3 от E1 i E2\n"
                     "-> ";
 
        if( !(std::cin >> v) || (v < 1) || (v > 3) ) return 0;
 
        std::system("cls");
        std::cout << "\n|---------------------------------------|\n"
                     "|   Таблица зависимости J" << v << " от E1 i E2   |\n"
                     "|---|-----------------------------------|\n"
                     "|---|---------------- E2 ---------------|\n"
                     "| E1|   15   |   20   |   25   |   30   |\n"
                     "|---|--------|--------|--------|--------|\n";
 
        std::cout.setf(std::ios::fixed);
        for(E1 = 10; E1 <= 100; E1+= 10)
        {
            std::cout << '|' << std::setw(3) << E1 << '|';
 
            for(E2 = 15; E2 <= 30; E2+= 5)
            {
                std::cout.width(8);
                switch(v)
                {
                case 1: std::cout << std::setprecision(3) << J1(E1, E2, r1, r2, r3) << '|'; break;
                case 2: std::cout << std::setprecision(3) << J2(E1, E2, r1, r2, r3) << '|'; break;
                case 3: std::cout << std::setprecision(3) << J3(E1, E2, r1, r2, r3) << '|'; break;
                }
            }
 
            std::cout << "\n|---|--------|--------|--------|--------|\n";
        }
    }
}
Вот код второго варианта (используя объектно-ориентированный подход):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "stdafx.h"
#include <iostream>
#include <iomanip>
 
class power_box {
    float r1;
    float r2;
    float r3;
    int E1;
    int E2;
public:
    double J2(int E1, int E2, float r1, float r2, float r3)
    {
        return (E1/(r1+((r2*r3)/(r2+r3))))*(r3/(r2+r3))-(E2/(r2+(r1*r3/(r1+r3))));
    };
    double J3(int E1, int E2, float r1, float r2, float r3)
    {
        return (E1/(r1+((r2*r3)/(r2+r3))))*(r2/(r2+r3))+(E2/(r2+(r1*r3/(r1+r3))))*(r1/(r1+r3));
    };
    double J1(int E1, int E2, float r1, float r2, float r3)
    {
        return J2(E1, E2, r1, r2, r3)+J3(E1, E2, r1, r2, r3);
    };
} tok;
 
int main()
{
    int v, E1, E2;
    float r1 = 30.6, r2 = 3.25, r3 = 20.57;
    setlocale(LC_ALL, "Russian");
    for(;;)
    {
        std::cout << "\n1. Таблица зависимости J1 от E1 i E2\n"
                     "2. Таблица зависимости J2 от E1 i E2\n"
                     "3. Таблица зависимости J3 от E1 i E2\n"
                     "-> ";
 
        if( !(std::cin >> v) || (v < 1) || (v > 3) ) return 0;
 
        std::system("cls");
        std::cout << "\n|---------------------------------------|\n"
                     "|   Таблица зависимости J" << v << " от E1 i E2   |\n"
                     "|---|-----------------------------------|\n"
                     "|---|---------------- E2 ---------------|\n"
                     "| E1|   15   |   20   |   25   |   30   |\n"
                     "|---|--------|--------|--------|--------|\n";
 
        std::cout.setf(std::ios::fixed);
        for(E1 = 10; E1 <= 100; E1+= 10)
        {
            std::cout << '|' << std::setw(3) << E1 << '|';
 
            for(E2 = 15; E2 <= 30; E2+= 5)
            {
                std::cout.width(8);
                switch(v)
                {
                case 1: std::cout << std::setprecision(3) << tok.J1(E1, E2, r1, r2, r3) << '|'; break;
                case 2: std::cout << std::setprecision(3) << tok.J2(E1, E2, r1, r2, r3) << '|'; break;
                case 3: std::cout << std::setprecision(3) << tok.J3(E1, E2, r1, r2, r3) << '|'; break;
                }
            }
 
            std::cout << "\n|---|--------|--------|--------|--------|\n";
        }
    }
}
Тут я просто добавил класс, и в него занес функции, все остальное осталось прежним. Так надо было сделать, это считается объектно-ориентированный подход, или я не правильно мыслю? Ну и может я где, чего, неправильно объявил, написал, говорите не стесняйтесь!:-)
Спасибо.
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
31.08.2011, 23:17  [ТС]     Структурированный в объектно-ориентированный #24
Кто-нибудь, что-нибудь подскажет?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
31.08.2011, 23:28     Структурированный в объектно-ориентированный #25
Цитата Сообщение от footbaler Посмотреть сообщение
Тут я просто добавил класс, и в него занес функции, все остальное осталось прежним. Так надо было сделать, это считается объектно-ориентированный подход, или я не правильно мыслю? Ну и может я где, чего, неправильно объявил, написал, говорите не стесняйтесь!:-)
Спасибо.
конструкторов нет, как вы проиницилизируете поля класса? и где само использование класса?
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
01.10.2011, 13:06  [ТС]     Структурированный в объектно-ориентированный #26
Доброго времени суток!
После не большой паузы, я вновь занимаюсь данным вопросом.
Вот, что у меня получилось сейчас. Уважаемые эксперты, указывайте, пожалуйста, на мои ошибки. Интересует, конкретно, правильность объектно-ориентированного подхода.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <iomanip>
#include <windows>
 
class power_box {
     float r1, r2, r3;
     int E1, E2;
public:
     power_box(int i, int j);
     double J1();
     double J2();
     double J3();
};
 
power_box::power_box(int i, int j)
{
 r1 = 30.6;
 r2 = 3.25;
 r3 = 20.57;
 E1 = i;
 E2 = j;
}
 
double power_box::J2()
{
    return (E1/(r1+((r2*r3)/(r2+r3))))*(r3/(r2+r3))-(E2/(r2+(r1*r3/(r1+r3))));
}
 
double power_box::J3()
{
    return (E1/(r1+((r2*r3)/(r2+r3))))*(r2/(r2+r3))+(E2/(r2+(r1*r3/(r1+r3))))*(r1/(r1+r3));
}
 
double power_box::J1()
{
    return J2() + J3();
}
 
int main()
{
    for(;;)
    {
        cout << "\n1. Tablica zavisimosti J1 ot E1 i E2\n"
                  "2. Tablica zavisimosti J2 ot E1 i E2\n"
                  "3. Tablica zavisimosti J3 ot E1 i E2\n"
                  "-> ";
        int v;
        if( !(cin >> v) || (v < 1) || (v > 3) ) return 0;
        system("cls");
        cout << "\n------------------ E2 --------------\n"
                " E1     15     20      25      30   \n"
                "------------------------------------\n";
        cout.setf(ios::fixed);
        for(int i = 10; i <= 100; i+= 10)
        {
            cout << setw(3) << i;
            for(int j = 15; j <= 30; j+= 5)
            {
                power_box power(i, j);
                cout.width(8);
                switch(v)
                {
                    case 1: cout << setprecision(3) << power.J1(); break;
                    case 2: cout << setprecision(3) << power.J2(); break;
                    case 3: cout << setprecision(3) << power.J3(); break;
                }
            }
            cout << "\n------------------------------------\n";
        }
    }
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.10.2011, 13:25     Структурированный в объектно-ориентированный #27
Т.к. J1-2-3 не меняют состояние объекта, их нужно сделать константными (дописать const в конце).

Добавлено через 3 минуты
Но конкретно этот код от ООП ничего не выигрывает.
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
01.10.2011, 13:31  [ТС]     Структурированный в объектно-ориентированный #28
Исправлено.
Цитата Сообщение от Deviaphan Посмотреть сообщение
Но конкретно этот код от ООП ничего не выигрывает.
Поясните пожалуйста.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.10.2011, 13:37     Структурированный в объектно-ориентированный #29
Такой код по сути равнозначен.
C++
1
2
3
4
5
6
7
8
     const float r1=30.6, r2=3.25, r3=20.57;
 
struct power_box {
     int E1, E2;
};
     double J1( const power_box * );
     double J2( const power_box * );
     double J3( const power_box * );
На самом деле, тебе даже не нужна структура, можно сразу Е1 и Е2 в функции передавать.

Ну и по начальному коду. Раз r1-2-3 константы, их можно сделать статическими константами и они не будут занимать место в объекте power_box.
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
01.10.2011, 14:10  [ТС]     Структурированный в объектно-ориентированный #30
Я немного запутался, поэтому поясню, что изначально мне нужно было, почему я создал данную тему.
Я делаю курсовую работу. Задание курсовой: написать программу двумя способами, использую структурированный и объектно-ориентированный подход. С первым способом проблем не возникло,
вот код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <iomanip>
#include <windows>
 
double J2(int E1, int E2, float r1, float r2, float r3)
{
    return (E1/(r1+((r2*r3)/(r2+r3))))*(r3/(r2+r3))-(E2/(r2+(r1*r3/(r1+r3))));
}
 
double J3(int E1, int E2, float r1, float r2, float r3)
{
    return (E1/(r1+((r2*r3)/(r2+r3))))*(r2/(r2+r3))+(E2/(r2+(r1*r3/(r1+r3))))*(r1/(r1+r3));
}
 
double J1(int E1, int E2, float r1, float r2, float r3)
{
    return J2(E1, E2, r1, r2, r3)+J3(E1, E2, r1, r2, r3);
}
 
int main()
{
    for(;;)
    {
        cout << "\n1. Tablica zavisimosti J1 ot E1 i E2\n"
                  "2. Tablica zavisimosti J2 ot E1 i E2\n"
                  "3. Tablica zavisimosti J3 ot E1 i E2\n"
                  "-> ";
        int v;
        if( !(cin >> v) || (v < 1) || (v > 3) ) return 0;
        system("cls");
        cout << "\n------------------ E2 --------------\n"
                " E1     15     20      25      30   \n"
                "------------------------------------\n";
        cout.setf(ios::fixed);
        float r1 = 30.6, r2 = 3.25, r3 = 20.57;
        for(int E1 = 10; E1 <= 100; E1+= 10)
        {
            cout << setw(3) << E1;
            for(int E2 = 15; E2 <= 30; E2+= 5)
            {
                cout.width(8);
                switch(v)
                {
                    case 1: cout << setprecision(3) << J1(E1, E2, r1, r2, r3); break;
                    case 2: cout << setprecision(3) << J2(E1, E2, r1, r2, r3); break;
                    case 3: cout << setprecision(3) << J3(E1, E2, r1, r2, r3); break;
                }
            }
            cout << "\n------------------------------------\n";
        }
    }
}
, а с ООП возникли проблемы.
Выберете, пожалуйста: 1) то, что я делаю можно назвать ООП; 2) я двигаюсь в правильном направлении, но у меня есть ошибки; 3) нужно вообще все делать по другому.
Спасибо.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.10.2011, 14:16     Структурированный в объектно-ориентированный #31
То, что ты в ООП написал - абсолютно правильно! Но можно учесть две пожелании из двух предыдущих сообщений.
То, что код ничего не выиграл от ООП вовсе не значит, что он не правильный или что-то проиграл.
Просто как демонстрация возможностей ООП эта задача плохо подходит.

Придумал. Ещё можно метод печати зависимости в виде метода сделать
C++
1
2
3
4
5
6
7
8
9
10
void FX(int v) const
{
 cout.width(8);
                switch(v)
                {
                    case 1: cout << setprecision(3) << J1(); break;
                    case 2: cout << setprecision(3) << J2(); break;
                    case 3: cout << setprecision(3) << J3(); break;
                }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2011, 14:38     Структурированный в объектно-ориентированный
Еще ссылки по теме:

Задача на ориентированный граф C++
Ориентированный граф. Получить из списка рёбер матрицу смежности C++
C++ Объектно-ориентированный аналог телефонного справочника: поиск по нескольким параметрам одновременно

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
footbaler
1 / 1 / 0
Регистрация: 18.12.2010
Сообщений: 50
01.10.2011, 14:38  [ТС]     Структурированный в объектно-ориентированный #32
Это радует!
Вот теперь все прояснилось, спасибо.
Yandex
Объявления
01.10.2011, 14:38     Структурированный в объектно-ориентированный
Ответ Создать тему
Опции темы

Текущее время: 13:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru