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

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

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

Студворк — интернет-сервис помощи студентам
Тема вот такая ДВУХМЕРНЫЕ ДИНАМИЧЕСКИЕ МАССИВЫ, ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ.
Задание:
Кликните здесь для просмотра всего текста
В двухмерном массиве (размеры массива 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2014, 17:15
Ответы с готовыми решениями:

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

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

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

15
 Аватар для cooller
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 17:28
Цитата Сообщение от 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
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
19.04.2014, 21:46  [ТС]
Цитата Сообщение от 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
 Аватар для cooller
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 22:37
Цитата Сообщение от 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
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
19.04.2014, 23:16  [ТС]
Спасибо, вставил исправленное, но выбило ошибку E2141 Declaration syntax error
C++
1
2
 int Fun(int, int);
void main()  // <----здесь
вроде скобки сейчас просмотрел, все хватает и лишних нету =\
0
 Аватар для cooller
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 23:23
Pipetos, стандарт требует чтобы main возвращал тип int
0
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
20.04.2014, 09:41  [ТС]
Сейчашний код такой
Кликните здесь для просмотра всего текста

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
У вас функция Fun принимает указатель на указатель, а вы передаете ей обычный int
0
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
20.04.2014, 11:07  [ТС]
Цитата Сообщение от Посмотреть сообщение
У вас функция Fun принимает указатель на указатель, а вы передаете ей обычный int
должно быть типо того?
C++
1
Fun(n, **a)
0
17 / 17 / 5
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 14:56
Примерно да, но я не понимаю, почему нет M?

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

*@@@@@
@*@@@@
@@*@@@
0
 Аватар для cooller
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
20.04.2014, 15:28
, уверен что так должно?
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
Цитата Сообщение от 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
 Аватар для cooller
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
20.04.2014, 15:58
Цитата Сообщение от Посмотреть сообщение
Нет, не уверен.
не уверен потому что то было неверно
Цитата Сообщение от Посмотреть сообщение
//delete[] arr
почему закомментил?
0
17 / 17 / 5
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 16:19
Цитата Сообщение от cooller_94 Посмотреть сообщение
почему закомментил?
Ошибку выдает, почему - не знаю
0
17 / 17 / 5
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 16:23
Массив неверно создается, поправил.
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
 Аватар для Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 263
20.04.2014, 19:22  [ТС]
Цитата Сообщение от Посмотреть сообщение
Примерно да, но я не понимаю, почему нет M?
Если массив будет "прямоугольный"(те M и N не равны), то как считать произведение?
на сколько я понял потому что будут считаться только числа основной диагонали a11 a22 a33 ann...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2014, 19:22
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru