Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
1

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

19.04.2014, 17:15. Показов 1859. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Тема вот такая ДВУХМЕРНЫЕ ДИНАМИЧЕСКИЕ МАССИВЫ, ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ.
Задание:
Кликните здесь для просмотра всего текста
В двухмерном массиве (размеры массива 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;
 
}
 
//---------------------------------------------------------------------------
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2014, 17:15
Ответы с готовыми решениями:

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

В одномерном целочисленном массиве (размер массива (не больше 20) и значения его элементов вводить с клавиатуры) вычислить:
В одномерном целочисленном массиве (размер массива (не больше 20) и значения его элементов вводить...

В двухмерном целочисленном массиве найти указанное значение и вычислить результаты указанных действий
Народ помогите решить хоть какие нибудь задания а то у меня совсем не получается. В двухмерном...

Найти значение 3-его по значению элемента и значения всех элементов массива, которые его превышают, и заменить на найденное значение
Обьявить массив целых чисел и заполнить его случайными значениями.Размер массива и диапазон его...

15
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 17:28 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;
0
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
19.04.2014, 21:46  [ТС] 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 }
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 22:37 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;
}
0
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
19.04.2014, 23:16  [ТС] 5
Спасибо, вставил исправленное, но выбило ошибку E2141 Declaration syntax error
C++
1
2
 int Fun(int, int);
void main()  // <----здесь
вроде скобки сейчас просмотрел, все хватает и лишних нету =\
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 23:23 6
Pipetos, стандарт требует чтобы main возвращал тип int
0
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
20.04.2014, 09:41  [ТС] 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, лупит ошибку( написал в коде)
0
17 / 17 / 5
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 10:45 8
У вас функция Fun принимает указатель на указатель, а вы передаете ей обычный int
0
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
20.04.2014, 11:07  [ТС] 9
Цитата Сообщение от Посмотреть сообщение
У вас функция Fun принимает указатель на указатель, а вы передаете ей обычный int
должно быть типо того?
C++
1
Fun(n, **a)
0
17 / 17 / 5
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 14:56 10
Примерно да, но я не понимаю, почему нет M?

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

*@@@@@
@*@@@@
@@*@@@
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
20.04.2014, 15:28 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:: ****
0
17 / 17 / 5
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 15:54 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;
}
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
20.04.2014, 15:58 13
Цитата Сообщение от Посмотреть сообщение
Нет, не уверен.
не уверен потому что то было неверно
Цитата Сообщение от Посмотреть сообщение
//delete[] arr
почему закомментил?
0
17 / 17 / 5
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 16:19 14
Цитата Сообщение от cooller_94 Посмотреть сообщение
почему закомментил?
Ошибку выдает, почему - не знаю
В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение
0
17 / 17 / 5
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 16:23 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;
}
0
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
20.04.2014, 19:22  [ТС] 16
Цитата Сообщение от Посмотреть сообщение
Примерно да, но я не понимаю, почему нет M?
Если массив будет "прямоугольный"(те M и N не равны), то как считать произведение?
на сколько я понял потому что будут считаться только числа основной диагонали a11 a22 a33 ann...
0
20.04.2014, 19:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2014, 19:22
Помогаю со студенческими работами здесь

С клавиатуры вводятся значения 10 элементов массива. Найти количество минимальных элементов в массиве
С клавиатуры вводятся значения 10 элементов массива. Найти количество минимальных элементов в...

В двухмерном массиве n*m (4*4) найти среднее арифметическое значение элементов первого столбца
В двухмерном массиве n*m (4*4) найти среднее арифметическое значение элементов первого столбца и...

Найти количество элементов, значение которых равно False, в двухмерном массиве
количество элементов, значение которых равно FALSE в двухмерном массиве подскажите направление.как...

Запрашивать размеры двумерного массива, значения его элементов и выводит на экран массива в виде матрицы
помогите решить!!!!!!!! Составьте программу, которая запрашивает размеры двумерного массива,...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru