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

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

Войти
Регистрация
Восстановить пароль
 
 
Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 260
#1

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

19.04.2014, 17:15. Просмотров 580. Ответов 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;
 
}
 
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2014, 17:15     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение
Посмотрите здесь:

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

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

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

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

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

В заданном массиве найти количество элементов, отличающихся от минимального на указанное значение - C++
Добрый день. Есть задание - нужно узнать количество элементов массива, которые отличаются от минимального на 5. Помогите написать на С++,...

Вычислить количество элементов массива, не меньших элемента с заданным номером, значение номера вводить с клавиатуры. - C++
Вычислить количество элементов массива, не меньших элемента с заданным номером, значение номера вводить с клавиатуры. Данная программа не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cooller
565 / 533 / 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
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 260
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
565 / 533 / 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
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 260
19.04.2014, 23:16  [ТС]     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #5
Спасибо, вставил исправленное, но выбило ошибку E2141 Declaration syntax error
C++
1
2
 int Fun(int, int);
void main()  // <----здесь
вроде скобки сейчас просмотрел, все хватает и лишних нету =\
cooller
565 / 533 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
19.04.2014, 23:23     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение #6
Pipetos, стандарт требует чтобы main возвращал тип int
Pipetos
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 260
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
4 / 4 / 0
Регистрация: 07.06.2013
Сообщений: 260
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
565 / 533 / 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
565 / 533 / 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 и значения его элементов вводить с клавиатуры) найти указанное значение
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 16:23     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение
Еще ссылки по теме:

Найти в массиве значение и вывести его индекс на экран, вычислить сумму модулей элементов массива - C++
Написать программу обработки одномерного статического массива целых случайных чисел в диапазоне значений -100…100 в соответствии с...

В двухмерном массиве найти минимальный, отрицательный элемент массива - C++
В двухмерном массиве найти минимальный, отрицательный элемент массива. Если его нет, то вывести сообщение об этом.Решить в с++ с помощью...

Найти наименьшее значение среди положительных элементов и его индекс в массиве - C++
Ребят, помогите, пожалуйста. Знаю, задание не особо сложное, по массивам, но всё никак не могу нормально написать, туплю. Вот текст...

Найти максимальный элемент (его номер и значение) в массиве А из 100 элементов - C++
4. Найти максимальный элемент (его номер и значение) в массиве А из 100 элементов.

Найти количество первых целых положительных чисел, сумма которых не превышает S. Значение S вводить с клавиатуры. - C++
Найти количество первых целых положительных чисел, сумма которых не превышает S. Значение S вводить с клавиатуры.


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

Или воспользуйтесь поиском по форуму:
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;
}
Yandex
Объявления
20.04.2014, 16:23     В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение
Ответ Создать тему
Опции темы

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