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

В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение - C++

Восстановить пароль Регистрация
 
Pipetos
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 259
19.04.2014, 17:15     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #1
Тема вот такая ДВУХМЕРНЫЕ ДИНАМИЧЕСКИЕ МАССИВЫ, ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ.
Задание:
Кликните здесь для просмотра всего текста
В двухмерном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение.
Массив в памяти разместить динамически (с использованием операций new и delete), ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных.
1. Найти произведение элементов, расположенных на главной диагонали.
2.Вторичной диагонали
3. Задать выбор пользователю вводить матрицу вручную или же ввести данные рандомно.

По сути при помощи примерного задание из методички накалякал вот такой код. Но он не работает, буду очень признателен если кто укажет на ошибку и поможет довести задание до ума... Пока добиваюсь чтобы работал 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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
#include <alloc.h>
#include <conio.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
    int Fun(int, int);
void main()
{
        int **a, i, j, n,m, pr;
    cout << "\t Input N: ";
    cin >> n;
    a = new int*[n];
    for(i=0; i<n;i++)
                a[i] = new int[n];
    cout <<"\n Input A" << endl;
    for(i=0; i<n; i++)
                for(j=0; j<n; j++){
                        cout << "\t a[" << i+1 << "][" << j+1 << "] = ";
                        cin >> a[i][j];
                }
    cout <<"\n Matrix A:" << endl;
    for(i=0; i<n; i++) {
                for(j=0; j<n; j++)
                        cout << "\t" << a[i][j];
                cout << endl;
    }
 
    pr = Fun(n, m);
    cout << "\n  Proizvedenie = " << pr << endl;
        delete []a;
    cout << "\n\t Delete !" << endl;
    cout << " Press any key ... " << endl;
    getch();
}
 
int Fun(int a, int **x);
       {
    int i, j, s = 0;
    for(i=0; i<a;i++)
           s*= x[i][i];
            }
    return s;
 
}
 
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2014, 17:15     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение
Посмотрите здесь:

Найти значение 3-го по величине элемента и значения всех элементов массива, которые его превышают, заменить на найденное значение C++
Найти значение 3-го по величине элемента и значение всех элементов массива, которые его превышают, заменить на найденное значение C++
C++ Вычислить количество элементов массива, не меньших элемента с заданным номером, значение номера вводить с клавиатуры.
C++ Найти в массиве значение и вывести его индекс на экран, вычислить сумму модулей элементов массива
C++ В двухмерном целочисленном массиве найти указанное значение и вычислить результаты указанных действий
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 17:28     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #2
Цитата Сообщение от Pipetos Посмотреть сообщение
int Fun(int a, int **x);
* * * *{
* * int i, j, s = 0;
* * for(i=0; i<a;i++)
* * * * * *s*= x[i][i];
* * * * * * }
* * return s;
}
почему переменная для вычисления произведения называется s?ну это еще пол беды
Чтобы вычислить произведения, начальное значение должно быть 1!

Добавлено через 1 минуту
Цитата Сообщение от Pipetos Посмотреть сообщение
pr = Fun(n, m);
m у вас обычная переменная которая нужна не понятно для чего, а передавать вторым параметром вы должны массив
C++
1
pr = Fun(n, a);
Вот так должно выглядеть очистка памяти из двумерного массива
C++
1
2
3
for(int i=0;i<n;i++)
delete [] a[i];
delete [] a;
Pipetos
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 259
19.04.2014, 21:46  [ТС]     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #3
Цитата Сообщение от cooller_94 Посмотреть сообщение
почему переменная для вычисления произведения называется s?ну это еще пол беды
Чтобы вычислить произведения, начальное значение должно быть 1!
ошибку понял, вместо s по сути должно быть pr...исправил.
C++
1
2
3
int i, j, pr = 1;
    for(i=0; i<a;i++)
           pr*= x[i][i];
Цитата Сообщение от cooller_94 Посмотреть сообщение
pr = Fun(n, a);
у меня выдаёт ошибку, мне кажется у меня ошибка где то при описании прототипа функции
Кликните здесь для просмотра всего текста
[C++ Error] test2.cpp(33): E2034 Cannot convert 'int * *' to 'int'
[C++ Error] test2.cpp(33): E2340 Type mismatch in parameter 2 (wanted 'int', got 'int * *')
[C++ Warning] test2.cpp(49): W8070 Function should return a value
[C++ Error] test2.cpp(50): E2040 Declaration terminated incorrectly
[C++ Error] test2.cpp(52): E2190 Unexpected }
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 22:37     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #4
Цитата Сообщение от Pipetos Посмотреть сообщение
int Fun(int a, int **x);
* * * *{
* * int i, j, s = 0;
* * for(i=0; i<a;i++)
* * * * * *s*= x[i][i];
* * * * * * }
* * return s;
}
В реализации после названия функции не должно быть точки с запятой, да и с фигурными скобками немного напутали
так правильно
C++
1
2
3
4
5
6
7
8
9
int Fun(int a, int **x)
{
    int i, j, p = 1;
    for(i=0; i<a; i++)
    {
        p*= x[i][i];
    }
    return s;
}
Pipetos
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 259
19.04.2014, 23:16  [ТС]     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #5
Спасибо, вставил исправленное, но выбило ошибку E2141 Declaration syntax error
C++
1
2
 int Fun(int, int);
void main()  // <----здесь
вроде скобки сейчас просмотрел, все хватает и лишних нету =\
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 23:23     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #6
Pipetos, стандарт требует чтобы main возвращал тип int
Pipetos
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 259
20.04.2014, 09:41  [ТС]     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <iostream.h>
#include <alloc.h>
#include <conio.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
   int Fun(int, int);
void main()
 
{
        int **a, i, j, n, pr;
    cout << "\t Input N: ";
    cin >> n;
    a = new int*[n];
    for(i=0; i<n;i++)
                a[i] = new int[n];
    cout <<"\n Input A" << endl;
    for(i=0; i<n; i++)
                for(j=0; j<n; j++)
                {
                        cout << "\t a[" << i+1 << "][" << j+1 << "] = ";
                        cin >> a[i][j];
                }
    cout <<"\n Matrix A:" << endl;
    for(i=0; i<n; i++)
         {
                for(j=0; j<n; j++)
                        cout << "\t" << a[i][j];
                cout << endl;
    }
 
    pr = Fun(n, a); // - ОШИБКА  [C++ Error] z11.cpp(36): E2034 Cannot convert 'int * *' to 'int'
 // [C++ Error] z11.cpp(36): E2340 Type mismatch in parameter 2 (wanted 'int', got 'int * *')
  //[C++ Error] z11.cpp(50): E2034 Cannot convert 'int' to 'int * *'
 
    cout << "\n  Proizvedenie = " << pr << endl;
     for(int i=0;i<n;i++)
delete [] a[i];
delete [] a;
 
    cout << "\n\t Delete !" << endl;
    cout << " Press any key ... " << endl;
    getch();
}
 
int Fun(int **a, int **x)
{
    int i, j, pr = 1;
    for(i=0; i<a; i++)
    {
        pr*= x[i][i];
    }
    return pr;
 
}

Когда ставлю чтобы main возвращал тип int, лупит ошибку( написал в коде)
16 / 16 / 1
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 10:45     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #8
У вас функция Fun принимает указатель на указатель, а вы передаете ей обычный int
Pipetos
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 259
20.04.2014, 11:07  [ТС]     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #9
Цитата Сообщение от Посмотреть сообщение
У вас функция Fun принимает указатель на указатель, а вы передаете ей обычный int
должно быть типо того?
C++
1
Fun(n, **a)
16 / 16 / 1
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 14:56     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #10
Примерно да, но я не понимаю, почему нет M?

Если массив будет "прямоугольный"(те M и N не равны), то как считать произведение?
Кликните здесь для просмотра всего текста

*@@@@@
@*@@@@
@@*@@@
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
20.04.2014, 15:28     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #11
, уверен что так должно?
C++
1
Fun(n, **a)
что то мне подсказывает что у него было правильно
а ошибка, потому что он почему то начал передавать 2 массива, вместо одного. И раньше был a массив, теперь это у него размерность
Цитата Сообщение от Pipetos Посмотреть сообщение
Когда ставлю чтобы main возвращал тип int, лупит ошибку( написал в коде)
C++
1
2
3
4
5
6
7
int main()
{
/*
твой код
*/
return 0;
}
И еще, cout, cin и тд. находятся в пространстве имен std. Ты должен либо подключить его сначала
C++
1
using namespace std;
либо обращаться напрямую
C++
1
std::cout<<"Hello";
либо так
C++
1
2
using std::cout;
using std:: ****
16 / 16 / 1
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 15:54     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #12
Цитата Сообщение от cooller_94 Посмотреть сообщение
уверен что так должно?
Нет, не уверен.
В общем вот мой код:
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
long long multiple(bool type, int sizeN, int sizeM, int **arr)//при разных размерах N и M - деревянный алгоритм
{
    int size = min(sizeN, sizeM);//
    long long result = 1;
    for(int i=0; i<size; i++) {
        if(type) {
            result *= arr[i][i];//первая диагональ
        } else {
            result *= arr[size-i-1][i];//вторая диагональ
        }
    }
    return result;
}
 
int main() 
{
    int **arr, n, m;
    bool method = 0;
 
    cout << "Enter N: ";
    cin >> n;
    cout << "Enter M: ";
    cin >> m;
 
    arr = new int*[n];
    for(int i=0; i<m; i++)
        arr[i] = new int[m];
 
    cout << "Use random? 0 - no, 1 - yes: ";
    cin >> method;
    if(method) {
        srand(time(0));
        for(int i=0; i<n; i++) {
            for(int j=0; j<m; j++) {
                arr[i][j] = rand()%10;
            }
        }
    } else {
        for(int i=0; i<n; i++) {
            for(int j=0; j<m; j++) {
                printf("[%i][%i] = ", i, j);
                cin >> arr[i][j];
                cout << endl;
            }
        }
    }
    printf("==Array==\n");
    for(int i=0; i<n; i++) {
        for(int j=0; j<m; j++) {
            printf(" %i", arr[i][j]);
        }
        printf("\n");
    }
    long long result = multiple(true, n, m, arr);
    cout << "Result 1: " << result << endl;
    result = multiple(false, n, m, arr);
    cout << "Result 2: " << result << endl;
 
    for(int i=0; i<n; i++)
       delete[] arr[i];
    //delete[] arr;
 
    system("pause");
    return 0;
}
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
20.04.2014, 15:58     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #13
Цитата Сообщение от Посмотреть сообщение
Нет, не уверен.
не уверен потому что то было неверно
Цитата Сообщение от Посмотреть сообщение
//delete[] arr
почему закомментил?
16 / 16 / 1
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 16:19     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #14
Цитата Сообщение от cooller_94 Посмотреть сообщение
почему закомментил?
Ошибку выдает, почему - не знаю
В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение
16 / 16 / 1
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 16:23     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #15
Массив неверно создается, поправил.
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
long multiple(bool type, int sizeN, int sizeM, int **arr)//при разных размерах N и M - деревянный алгоритм
{
    int size = min(sizeN, sizeM);//
    long long result = 1;
    for(int i=0; i<size; i++) {
        if(type) {
            result *= arr[i][i];//первая диагональ
        } else {
            result *= arr[size-i-1][i];//вторая диагональ
        }
    }
    return result;
}
 
int main() 
{
    int **arr, n, m;
    bool method = 0;
 
    cout << "Enter N: ";
    cin >> n;
    cout << "Enter M: ";
    cin >> m;
 
    arr = new int*[n];
    for(int i=0; i<n; i++)
        arr[i] = new int[m];
 
    cout << "Use random? 0 - no, 1 - yes: ";
    cin >> method;
    if(method) {
        srand(time(0));
        for(int i=0; i<n; i++) {
            for(int j=0; j<m; j++) {
                arr[i][j] = rand()%10;
            }
        }
    } else {
        for(int i=0; i<n; i++) {
            for(int j=0; j<m; j++) {
                printf("[%i][%i] = ", i, j);
                cin >> arr[i][j];
                cout << endl;
            }
        }
    }
    printf("==Array==\n");
    for(int i=0; i<n; i++) {
        for(int j=0; j<m; j++) {
            printf(" %i", arr[i][j]);
        }
        printf("\n");
    }
    long long result = multiple(true, n, m, arr);
    cout << "Result 1: " << result << endl;
    result = multiple(false, n, m, arr);
    cout << "Result 2: " << result << endl;
 
    for(int i=0; i<n; i++)
       delete[] arr[i];
    delete[] arr;
 
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 19:22     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение
Еще ссылки по теме:

В одномерном целочисленном массиве (размер массива (не больше 20) и значения его элементов вводить с клавиатуры) вычислить: C++
В двухмерном целочисленном массиве (размеры массива N, M и значения его элементов вводить с клавиатуры) найти указанное значение. Массив в памяти разм C++
C++ В двухмерном массиве n*m (4*4) найти среднее арифметическое значение элементов первого столбца

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

Или воспользуйтесь поиском по форуму:
Pipetos
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 259
20.04.2014, 19:22  [ТС]     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #16
Цитата Сообщение от Посмотреть сообщение
Примерно да, но я не понимаю, почему нет M?
Если массив будет "прямоугольный"(те M и N не равны), то как считать произведение?
на сколько я понял потому что будут считаться только числа основной диагонали a11 a22 a33 ann...
Yandex
Объявления
20.04.2014, 19:22     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение
Ответ Создать тему
Опции темы

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