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

объяснения к коду - C++

Восстановить пароль Регистрация
 
almazf
Сообщений: n/a
16.01.2012, 14:52     объяснения к коду #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
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include "stdafx.h"
#include <time.h>
#include <iostream>
 
using namespace std;
 
template <class type> class lk{
    
public:
    type *m;
    int s;
 
    lk(){}                      
 
    lk(int k)                       
    {
        m = new type [k];
        s=k;
    }
 
    lk(const lk &obj)            
    {
        this->m=obj.m;
        this->s=obj.s;
 
        m = new type [s];
        for(int i=0; i<s; i++)
        {
            this->m[i]=obj.m[i];
        }
    }
    ~lk()                          
    {
        delete []m;
    }
    void put(type b, int a)           
    {
        if ( (a<1) || (a>s) ) cout<<"нет элемента массива с таким индексом\n";
        else m[a-1]=b;
    }
    type get(int a)                      
    {
        if ( (a<1) || (a>s) ) cout<<"нет элемента массива с таким индексом\n";
        else return m[a-1];
    }
    double srarif()             
 {
 double srarif=0;
 for (int i=0;i<s;i++){
 srarif=srarif+m[i];
 }
 srarif=srarif/s;
 return srarif; 
 }
};
int main()
{
    setlocale( LC_ALL, "Russian" );
 
    int size1,size2;
 
    cout<<"введите размеры массивов\n";
    cin>>size1;
    cin>>size2;
 
    if ( (size1!=int(size1)) || (size2!=int(size2)) ){ cout<<"некорректные данные";exit(1);}
    lk<int> c(size1);
    lk<double> d(size2);
 
 
    cout<<"\n";
 
    srand(unsigned(time(NULL)));
 
    cout<<"массив с данными типа int \n";
 
    for(int i=0;i<size1;i++)
    {
        c.m[i]=rand()%10 + 5;
        cout<<c.m[i]<<" ";
    }
 
    cout<<"\n";
 
    cout<<"массив с данными типа double\n";
 
    for(int i=0;i<size2;i++)
    {
        d.m[i]=(rand()%10 * 0.12)/0.13;
        cout<<d.m[i]<<" ";
    }
 
    cout<<"\n"<<"среднее арифметическое массива с данными типа int = "<<c.srarif()<<"\n";
    cout<<"среднее арифметическое массива с данными типа double = "<<d.srarif()<<"\n";
 
    int znach1, number1;
 
    cout<<"\nвведите значение и номер ячейки,\nкуда его положить для массива с данными типа int\n";
    cin>>znach1;
    cin>>number1;
 
    if ( znach1 == int(znach1) ) c.put(znach1,number1);
    else{ cout<<"не соответствующий тип значения"; exit(1);}
 
    double znach2;
    int number2;
    
    cout<<"введите значение и номер ячейки,\nкуда его положить для массива с данными типа double\n";
    cin>>znach2;
    cin>>number2;
 
    d.put(znach2,number2);
 
    cout<<"массив с данными типа int после изменения\n";
 
    for(int i=0;i<size1;i++)
    {
        cout<<c.m[i]<<" ";
    }
 
    cout<<"\n";
 
    cout<<"массив с данными типа double после изменения\n";
 
    for(int i=0;i<size2;i++)
    {
        cout<<d.m[i]<<" ";
    }
    
    int number3;
    cout<<"\n"<<"введите номер ячейки, требуемую для вывода для массива с данными типа int\n";
    cin>>number3;
    cout<<"\n"<<c.get(number3)<<"\n";
 
    int number4;
    cout<<"\n"<<"введите номер ячейки, требуемую для вывода для массива с данными типа double\n";
    cin>>number4;
    cout<<"\n"<<d.get(number4)<<"\n";
Добавлено через 28 минут
ЗАДАНИЕ:
Создать класс-шаблон, содержащий массив любых встроенных типов данных произвольного размера. В классе должны быть функции-члены:
1. конструктор, имеющий аргумент – размер массива,
2. функция, помещающая значение в ячейку с указанным индексом,
3. функция, возвращающая значение, находящееся в ячейке с нужным индексом,
4. функция, возвращающая значение среднего арифметического элементов массива.
Класс-шаблон должен быть в ортодоксальной канонической форме.
Функции при получении некорректных аргументов должны выдавать предупреждение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2012, 14:52     объяснения к коду
Посмотрите здесь:

C++ Уточнение по коду
Комментарии к коду C++
Вопрос по коду C++
Выручайте, объяснения внутри:) C++
C++ объяснения по коду
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
 Аватар для HighPredator
5352 / 1735 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
16.01.2012, 15:22     объяснения к коду #2
Вы даже не весь код привели...

Добавлено через 7 минут
Вот поднаписал кой-чего.
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include "stdafx.h"
#include <time.h>
#include <iostream>
 
using namespace std;
 
//------------------------------------------
//описание класса-шаблона "lk"
template <class type> class lk{
        
public:
        type *m;//собственно массив данных типа "type"
        int s;//длина массива
 
        lk(){}//пустой конструктор                      
 
        lk(int k)//конструктор с аргументом                       
        {
                m = new type [k];//выделение памяти под массив
                s=k;//запись количества элементов
        }
 
        lk(const lk &obj)  //конструктор копирования          
        {
                this->m=obj.m;
                this->s=obj.s;
 
                m = new type [s];
                for(int i=0; i<s; i++)
                {
                        this->m[i]=obj.m[i];
                }
        }
        ~lk()//деструктор                          
        {
                delete []m;//освобождаем память массива
        }
        void put(type b, int a)//функция, помещающая значение по индексу           
        {
                if ( (a<1) || (a>s) ) cout<<"нет элемента массива с таким индексом\n";
                else m[a-1]=b;
        }
        type get(int a)//функция возвращающая значение по индексу                      
        {
                if ( (a<1) || (a>s) ) cout<<"нет элемента массива с таким индексом\n";
                else return m[a-1];
        }
        double srarif()//функция, возвращающая среднее арифметическое элементов массива
 {
 double srarif=0;
 for (int i=0;i<s;i++){
 srarif=srarif+m[i];
 }
 srarif=srarif/s;
 return srarif; 
 }
};
int main()
{
        setlocale( LC_ALL, "Russian" );//установка вывода русских символов в консоль
 
        int size1,size2;
        //ввод размеров массивов
        cout<<"введите размеры массивов\n";
        cin>>size1;
        cin>>size2;
 
        if ( (size1!=int(size1)) || (size2!=int(size2)) ){ cout<<"некорректные данные";exit(1);}
        lk<int> c(size1);
        lk<double> d(size2);
 
 
        cout<<"\n";
        //инициализация генератора случайных чисел
        srand(unsigned(time(NULL)));
 
        cout<<"массив с данными типа int \n";
        //заполнение массива случайными числами
        for(int i=0;i<size1;i++)
        {
                c.m[i]=rand()%10 + 5;
                cout<<c.m[i]<<" ";
        }
 
        cout<<"\n";
 
        cout<<"массив с данными типа double\n";
        //заполнение массива случайными числами
        for(int i=0;i<size2;i++)
        {
                d.m[i]=(rand()%10 * 0.12)/0.13;
                cout<<d.m[i]<<" ";
        }
 
    cout<<"\n"<<"среднее арифметическое массива с данными типа int = "<<c.srarif()<<"\n";
        cout<<"среднее арифметическое массива с данными типа double = "<<d.srarif()<<"\n";
 
        int znach1, number1;
 
        cout<<"\nвведите значение и номер ячейки,\nкуда его положить для массива с данными типа int\n";
        cin>>znach1;
        cin>>number1;
 
        if ( znach1 == int(znach1) ) c.put(znach1,number1);
        else{ cout<<"не соответствующий тип значения"; exit(1);}
 
        double znach2;
        int number2;
        
        cout<<"введите значение и номер ячейки,\nкуда его положить для массива с данными типа double\n";
        cin>>znach2;
        cin>>number2;
 
        d.put(znach2,number2);
 
        cout<<"массив с данными типа int после изменения\n";
 
        for(int i=0;i<size1;i++)
        {
                cout<<c.m[i]<<" ";
        }
 
        cout<<"\n";
 
        cout<<"массив с данными типа double после изменения\n";
 
        for(int i=0;i<size2;i++)
        {
                cout<<d.m[i]<<" ";
        }
        
        int number3;
        cout<<"\n"<<"введите номер ячейки, требуемую для вывода для массива с данными типа int\n";
        cin>>number3;
        cout<<"\n"<<c.get(number3)<<"\n";
 
        int number4;
        cout<<"\n"<<"введите номер ячейки, требуемую для вывода для массива с данными типа double\n";
        cin>>number4;
        cout<<"\n"<<d.get(number4)<<"\n";
almazf
Сообщений: n/a
16.01.2012, 16:48     объяснения к коду #3
спасибо
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
16.01.2012, 17:09     объяснения к коду #4
У класса есть проблемы.
Конструктор по-умолчанию не инициализирует поля класса.
Имеется прямой доступ к полям s и m -- нарушение инкапсуляции.
При наличии динамически выделяемой памяти под поля объекта, не определен оператор присваивания -- нарушение инкапсуляции.
C++
1
if ( (a<1) || (a>s) ) cout<<"нет элемента массива с таким индексом\n";
Не надо выводить внутри класса, бросайте эксепшен.
C++
1
throw std::out_of_range("Index out of range.");
Цитата Сообщение от HighPredator Посмотреть сообщение
double srarif()//функция, возвращающая среднее арифметическое элементов массива
*{
*double srarif=0;
*for (int i=0;i<s;i++){
*srarif=srarif+m[i];
*}
*srarif=srarif/s;
*return srarif;
*}
Функция определена не для всех типов данных. Лучше сделать её внешней относительно класса.
Yandex
Объявления
16.01.2012, 17:09     объяснения к коду
Ответ Создать тему
Опции темы

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