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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
#1

Тип введенных елементов - C++

06.03.2014, 02:35. Просмотров 168. Ответов 0
Метки нет (Все метки)

Ребята помогите пожайлуста, нужно в вот эту прогу нужно сделать шаблон который будет определять тип введенных елементов матрици, и как я понял нужно выводить какого типа этот елемент. Но так же мне уточнили что можно взять всего 2 типа: int и float, и сделать для них. Но я очень плохо дружу с шаблонами. Я вот уже сколько сидел думал у меня не получаеться придумать как это сделать, не могли бы вы помоч очень нужно.

matrica.h
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
#pragma once
 
#include <string.h>
#include <iostream>
#include <cstdlib>
#include <clocale>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <ctime>
#include <iomanip>
 
class Dynamic
{
    double       **z;
    int         n;
    int         m;
    void deallocate();
    void newMemory();
    void randomGenerateSubMatrix(int, int, int, int);
    void fillFromMatrix(double **);
public:
    Dynamic();
    Dynamic(int, int);
    Dynamic(int, int, double);
    Dynamic(int, int, double**);
    Dynamic(int, int, int, int, int, int);
    ~Dynamic();
    void randomGenerate();
    void write();
    void napus();
    void fillMatrix(double);
};


matrica.cpp
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
141
142
143
144
145
146
147
148
149
150
151
152
#include "matrica.h"
 
using namespace std;
 
Dynamic::Dynamic() : z(NULL), n(0), m(0)
{
    newMemory();
    fillMatrix(0.0f);
}
 
Dynamic::Dynamic(int n_, int m_, double l) : z(NULL), n(n_), m(m_)
{
    newMemory();
    fillMatrix(l);
}
 
void Dynamic::randomGenerateSubMatrix(int left, int top, int right, int bottom) {
    if (left >= 0 && left < n
        && right >= left && right < n
        && top >= 0 && top < m &&
        bottom >= top && bottom < m) {
        for (int x = left; x <= right; ++x)
        for (int y = top; y <= bottom; ++y)
        {
            cout << "Введите:"; 
            cin >> z[x][y];
        }
    }
}
 
void Dynamic::fillFromMatrix(double ** p) {
    if (p == NULL)
        return;
 
    for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j)
        z[i][j] = p[i][j];
}
 
 
Dynamic::Dynamic(int n_, int m_) : z(NULL), n(n_), m(m_)
{
    newMemory();
    randomGenerate();
}
Dynamic::Dynamic(int w, int h, int l, int t, int r, int b) : z(NULL), n(w), m(h){
    newMemory();
    fillMatrix(0.0f);
    randomGenerateSubMatrix(l, t, r, b);
}
 
Dynamic::Dynamic(int w, int h, double** p) : z(NULL), n(w), m(h) {
    newMemory();
    fillFromMatrix(p);
}
 
 
void Dynamic::randomGenerate() {
    if (z == NULL)
        return;
    for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
    {
        cout << "Введите:"; 
        cin >> z[i][j];
    }
}
 
 
void Dynamic::write()
{
    cout << "Введите n и m: ";
    int temp_n, temp_m;
    cin >> temp_n >> temp_m;
    if (temp_n > 0 && temp_m > 0) {
        newMemory();//n и m поменяли, значит нужно перевыделить память
        n = temp_n;
        m = temp_m;
    }
}
 
 
 
void Dynamic::newMemory()
{
    if (m == 0 || n == 0) {
        return;
    }
    deallocate();//сначала удалим старую память, если такая была выделена
    z = new double *[n];
    for (int i = 0; i < n; i++) {
        z[i] = new double[m];
    }
}
 
void Dynamic::fillMatrix(double val) {
    if (z == NULL)
        return;
    for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        z[i][j] = val;
}
 
 
void Dynamic::napus()
{
    if (z == NULL) {
        printf("Матрица еще не создана\n\n");
        return;
    }
    printf("Наша матрица\n");
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < n; j++)
            cout << setw(4) << z[j][i];
        cout << endl;
    }
 
    if (n % 2 == 1 && m % 2 == 1)
        printf("Середнiй елемент: z[%d][%d]=%.0f\n", n / 2, m / 2, z[n / 2][m / 2]);
    else if (n % 2 == 1 && m % 2 == 0)
        printf("Середнiй елемент:\nz[%d][%d]=%.0f\nz[%d][%d]=%.0f\n", n / 2, (m - 1) / 2, z[n / 2][(m - 1) / 2], n / 2, m / 2, z[n / 2][m / 2]);
    else if (n % 2 == 0 && m % 2 == 1)
        printf("Середнiй елемент:\nz[%d][%d]=%.0f\nz[%d][%d]=%.0f\n", (n - 1) / 2, m / 2, z[(n - 1) / 2][m / 2], n / 2, m / 2, z[n / 2][m / 2]);
    else{
        printf("Середнiй елемент:\n");
        printf("z[%d][%d]=%.0f\n", (n - 1) / 2, (m - 1) / 2, z[(n - 1) / 2][(m - 1) / 2]);
        printf("z[%d][%d]=%.0f\n", (n - 1) / 2, m / 2, z[(n - 1) / 2][m / 2]);
        printf("z[%d][%d]=%.0f\n", n / 2, (m - 1) / 2, z[n / 2][(m - 1) / 2]);
        printf("z[%d][%d]=%.0f\n", n / 2, m / 2, z[n / 2][m / 2]);
    }
 
    system("pause");
}
 
Dynamic::~Dynamic()
{
    deallocate();
}
 
void Dynamic::deallocate() {
    if (z == NULL)//если память не выделена, тогда ничего не делаем
        return;
    for (int i = 0; i < n; i++)
    {
        delete[] z[i];
    }
 
    delete[] z;
 
    z = NULL;
}


Исходный код.cpp
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
#include "matrica.h"
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    Dynamic dynamic;
 
    do
    {
        cout << "1. Ввести даннi" << endl;
        cout << "2. Вивести даннi" << endl << endl;
 
        int key = _getch();
 
        switch (key)
        {
        case '1':   dynamic.write(); dynamic.randomGenerate();    break;
        case '2':   dynamic.napus();                break;
        default:
            cout << "Невiрний вибiр! Натиснiть будь-яку клавiшу для продовження..." << endl;
            _getch();
        }
 
    } while (true);
 
}


Добавлено через 18 минут
Очень нужна помощь, кому не сложно можете помочь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2014, 02:35     Тип введенных елементов
Посмотрите здесь:

шаблон функции который принимает в параметры массив количиство елементов и должен найти сумму елементов массив - C++
шаблон функции который принимает в параметры массив количиство елементов и должен найти сумму елементов массива

Массив из n елементов - C++
Разбираю код пример из книги, и вот столкнулся с недопониманием фрагмента кодпервое понятно что для инициализвации массива а из н, но не...

Знаки елементов. - C++
Условие: Ввести с клавиатуры N элементов и проверить чередуются ли знаки. Если да , то вывести на экран &quot;знаки одинаковые&quot;. Если...

Сума четных елементов и т.д. - C++
Здравствуйте, нужно сделать такое задание: 1) нужно создать числовой файл из случайных чисел 2) организовать его просмотр 3) найти...

Удаление елементов вектора - C++
никак не могу разобраться с итераторами: Мне нужно удалить элемент ветора, для этого я пользуюсь функцией erase К примеру мне нужно...

количество елементов массива - C++
подсчитать количество елементов массива c(6)=(2,1;3,6;-6,3;4,1;2,2;-2,3),значение которых больше 2,3.

Сумма непарных елементов - C++
Здравствуйте, помогите пожалуйста, надо сделать так, что бы считалась сумма непарных елементов. #include &lt;iostream&gt; #include &lt;ctime&gt; ...

Произведение елементов массива - C++
//в массиве состоящем из Н целочисленных елементов вычислить 1)сумму неотрицательных елементов этого массива //2)произведение елементов...

Сумма отрицательных елементов - C++
Помогите перевести код с Паскаля в С++ Задание: Переменной S присвоить значения, которые равны сумме отрицательных елементов масива...

Количество елементов у массиве - C++
Можно ли каким-то образом указать количество елементов массива через параметр?? int Array , где n - параметр.


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru