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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
#1

При вводе элементов массива выводить их тип (или int или float) - C++

12.03.2014, 22:56. Просмотров 1192. Ответов 4
Метки нет (Все метки)

Помогите с ошибкой, и если не сложно то с заданием а то я вроде сделал только не могу проверить так как крешит прогу(

А задание заключаеться в том что нужно при вводе елементов массива выводить их тип или 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
34
35
36
#pragma once
 
#include <string.h>
#include <iostream>
#include <cstdlib>
#include <clocale>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <ctime>
#include <iomanip>
#include <cmath>
 
template<class T>
class Dynamic
{
    T           **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(T);
};


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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include "matrica.h"
 
using namespace std;
 
template<class T>
Dynamic<T>::Dynamic() : z(NULL), n(0), m(0)
{
    newMemory();
    fillMatrix(0.0f);
}
 
template<class T>
Dynamic<T>::Dynamic(int n_, int m_, double l) : z(NULL), n(n_), m(m_)
{
    newMemory();
    fillMatrix(l);
}
 
template<class T>
void Dynamic<T>::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 << "Enter number: -> ";
            string z;
            cin >> z[x][y];
 
            if (any_of(number.begin(), number.end(), isalpha) ||
            count(number.begin(), number.end(), '.') > 1)
            {
            cout << "Bad input.\n";
            return 1;
            }
 
            if (number.find('.') != string::npos)
            cout << "Floating type.\n";
            else
            cout << "Integer type.\n";
 
            return 0;
        }
    }
}
 
template<class T>
void Dynamic<T>::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];
}
 
template<class T>
Dynamic<T>::Dynamic(int n_, int m_) : z(NULL), n(n_), m(m_)
{
    newMemory();
    randomGenerate();
}
 
template<class T>
Dynamic<T>::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);
}
 
template<class T>
Dynamic<T>::Dynamic(int w, int h, double** p) : z(NULL), n(w), m(h) {
    newMemory();
    fillFromMatrix(p);
}
 
template<class T>
void Dynamic<T>::randomGenerate() {
    if (z == NULL)
        return;
    srand(time(NULL));
    for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
        z[i][j] = (rand() % 99 + 1);
}
 
template<class T>
void Dynamic<T>::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;
    }
}
 
template<class T>
void Dynamic<T>::newMemory()
{
    if (m == 0 || n == 0) {
        return;
    }
    deallocate();//сначала удалим старую память, если такая была выделена
    z = new double *[n];
    for (int i = 0; i < n; i++) {
        z[i] = new double[m];
    }
}
 
template<class T>
void Dynamic<T>::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;
}
 
template<class T>
void Dynamic<T>::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");
}
 
template<class T>
Dynamic<T>::~Dynamic()
{
    deallocate();
}
 
template<class T>
void Dynamic<T>::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<int> 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);
 
}


Добавлено через 58 минут
Ребят помогите а то завтра здавать а сделать не могу(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2014, 22:56     При вводе элементов массива выводить их тип (или int или float)
Посмотрите здесь:
C++ Как в VC++ переводить строки в тип int или float ???????
C++ Почему при вводе элементов массива, программа прекращает работу или работает не так, как ожидается?
C++ Нужно откоректировать программу которая будет при вводе любого числа, выводить чётное оно или нет
C++ Изменить тип массива с int на float
C++ При вводе имени абонента или его номера выводить его фамилию, номер телефона и адрес.
C++ int или float
При вводе того или иного пароля открывать тот или иной txt-файл C++
Перевести массив цифр в число типа int или float C++
C++ Как число типа 2.88007e+018 привести в обычный int, float или просто вывести
C++ На вход подается число (int или float) в зависимости от его типа провернуть над ним разные операции
C++ Определять тип вводимой переменной (char или int)
C++ Почему при умножении разнотипных переменных (например, float и int) получается int?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Корд
7 / 7 / 0
Регистрация: 22.03.2013
Сообщений: 190
12.03.2014, 23:33     При вводе элементов массива выводить их тип (или int или float) #2
tAruuuch, компилируется? Если нет - какие ошибки говорит компилятор.
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
12.03.2014, 23:34  [ТС]     При вводе элементов массива выводить их тип (или int или float) #3
Корд, Ошибка 1 error MSB8020: The builds tools for v120 (Platform Toolset = 'v120') cannot be found. To build using the v120 build tools, either click the Project menu or right-click the solution, and then select "Update VC++ Projects...". Install v120 to build using the v120 build tools. C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets 44
Корд
7 / 7 / 0
Регистрация: 22.03.2013
Сообщений: 190
12.03.2014, 23:40     При вводе элементов массива выводить их тип (или int или float) #4
tAruuuch,
http://translate.google.ru/translate...0%26es_sm%3D93
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
12.03.2014, 23:55  [ТС]     При вводе элементов массива выводить их тип (или int или float) #5
Корд, теперь такая ошибка вилезла я почитал про неё но не понял почему она у меня вылазит, если не сложно можете об`яснить

Ошибка 1 error C2244: Dynamic<T>::fillMatrix: не удается сопоставить определение функции существующему объявлению c:\users\dima\documents\visual studio 2012\projects\mafaka\mafaka\matrica.cpp 122
Yandex
Объявления
12.03.2014, 23:55     При вводе элементов массива выводить их тип (или int или float)
Ответ Создать тему
Опции темы

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