Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

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

*@@@@@
@*@@@@
@@*@@@
0
cooller
565 / 533 / 120
Регистрация: 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 / 1
Регистрация: 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
cooller
565 / 533 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
20.04.2014, 15:58 #13
Цитата Сообщение от Посмотреть сообщение
Нет, не уверен.
не уверен потому что то было неверно
Цитата Сообщение от Посмотреть сообщение
//delete[] arr
почему закомментил?
0
17 / 17 / 1
Регистрация: 09.03.2013
Сообщений: 65
20.04.2014, 16:19 #14
Цитата Сообщение от cooller_94 Посмотреть сообщение
почему закомментил?
Ошибку выдает, почему - не знаю
В двухмерном массиве (размеры массива N M и значения его элементов вводить с клавиатуры) найти указанное значение
0
17 / 17 / 1
Регистрация: 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
20.04.2014, 16:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 16:23
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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