0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 39
1

Реализовать передачу параметров по ссылке для приведенной задачи с матрицей

08.09.2014, 17:42. Показов 710. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, сегодня сдавал программу, которая определяет в целочисленной квадратной матрице:
1.) Сумму элементов только тех столбцов, в которых есть хотя бы 1 отрицательный элемент.
2.) Минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.

Программа абсолютно правильная, но сказали что нужно сделать передачу параметров по ссылке. Я вообще не могу понять как это. Читал несколько статей (пытался сделать по примеру http://younglinux.info/c/function) но так и не смог сделать. Помогите пожалуйста.
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <math.h>
#include<clocale>
#include <iomanip>
using namespace std;
 
//сумма элементов (1 условие)
 
int summa (int **ar,int n)
{int k,sum,i,j;
bool flag;
for (i=0;i<=n; i++) {
k=1; sum=0;
flag=true;
  for (j=0;j<=n; j++)
  {
        sum+=ar[j][i]; 
        if (ar[j][i]<0)
            flag=false; 
   }
  if(flag) sum=0; //обнуляем сумму, если пройдя все элементы не наткнулись на отрицательный
  cout<<sum<<' '; }
 
return(0);
}
// Минимум сумы элемента диагоналей (2 условие)
int minimum(int **ar, int n)
{
int i = 0;
int j = 0;
int k = 0;
long currsum = 0;
long maxsum = ar[n][n]; 
// Проходим левую верхнюю часть
for ( i = 0; i < n; i++)
{
long currsum = 0;
for ( j = i, k = 0; (j >= 0) && (k <= i); j--, k++)
{
currsum += abs(ar[j][k]);
}
if (currsum < maxsum)
maxsum = currsum;
}
// Правую верхнюю часть
for ( i = n; i >= 1; i--)
{
long currsum = 0;
for ( j = i, k = n; (j <= n) && (k >= i); j++, k--)
{
currsum += abs(ar[j][k]);
} 
if (currsum < maxsum)
maxsum = currsum;
} 
 
return(maxsum);
}
 
int main()
{setlocale(LC_ALL, "rus");
int i,j,n,h,d;
cout<<"Введите размер квадратной матрицы " ;
cin>>n;
//Создание матрицы
int **ar=new int *[n];
for (i=0;i<=n; i++)
ar[i]= new int [n];
n=n-1;
//Ввод элементов
cout<<"Заполните матрицу " ;
for (i=0;i<=n; i++)
for (j=0;j<=n; j++)
cin>>ar[i][j];cout<<"----------------------Результат----------------------\n";
// Вызов функций
h=summa(ar,n);
d=minimum(ar,n);
cout<<"Минимум = "<<   setw(3)<<d<<endl;
 
//Освобождение памяти
for (i=0;i<=n; i++)
delete [] ar[i];
system("pause");
return(0);
}
Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2014, 17:42
Ответы с готовыми решениями:

Как в python сделать передачу параметров по ссылке?
Нужно, чтоб при вызове функции, корректно считались значения переменных comparison2 и transfer2....

Как реализовать передачу параметров из функции
Суть задания в том, чтобы написать мини программу для продажи билетов. Самолет совершает 5...

Реализовать передачу параметров через стек по ссылки в подпрограмму
Разобрался с сутью задания есть три модуля главный, подпрограмма ввода и вывода чисел в десятичной...

Как реализовать передачу функции ключа или не передачу
Есть функция: bool LoadExclusion() { std::string filename = &quot;Exclusion&quot;; std::ifstream...

9
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
08.09.2014, 17:51 2
может быть у меня день был очень тяжелый, но смысла передавать по ссылке нет, так как передается указатель на массив в функцию. Передача по ссылке нужна, если в общем, для экономии ресурсов, чтобы не создавать локальную копию для чего-то объемного, либо для того, чтобы внутри функции можно было менять значения переданного параметра. Указатель отлично справляется в данном случае и с тем, и с тем.
0
Модератор
Эксперт С++
13334 / 10635 / 6354
Регистрация: 18.12.2011
Сообщений: 28,408
08.09.2014, 17:53 3
Пример, где требуется ссылка.
Вынесем создание массива в отдельную функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Create(int& **a)  // Ссылка (&) означает, что передастся непосредственно переменная ar, а не ее копия
{
//Создание матрицы
        a=new int*[n];
        for (i=0;i<=n; i++)
                 a[i]= new int[n];
}
int main()
{
     ....
     int** ar;
     Create(ar);
     
}
Если здесь ссылку не использовать, то при вызове Create(ar) в функцию передастся копия ar.
В результате по команде a=new int*[n];
адрес выделенной памяти запишется в копию и после выхода из функции
переменная ar не изменится.
0
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 39
08.09.2014, 18:21  [ТС] 4
Согласен что не нужна она, да и я не особо в этом понимаю. Но сказали надо именно сделать передачу по ссылке ибо не примут.

Добавлено через 10 минут
Выручайте мужики.
0
Тамика
08.09.2014, 18:22
  #5

Не по теме:

Цитата Сообщение от Viskas Посмотреть сообщение
Выручайте мужики.
Тогда прохожу мимо.

0
Модератор
Эксперт С++
13334 / 10635 / 6354
Регистрация: 18.12.2011
Сообщений: 28,408
08.09.2014, 18:25 6
Цитата Сообщение от Viskas Посмотреть сообщение
Выручайте мужики.
А чем мой пример Вас не устраивает?
Если мало одной ссылки, то можете передать ссылку и в остальные функции
(добавьте только префикс const для указания того, что ее менять не собираетесь.
C++
1
int summa (const int& **ar,int n)
0
118 / 118 / 41
Регистрация: 14.12.2013
Сообщений: 352
08.09.2014, 19:12 7
По-хорошему можно сделать функцию setRang(int& n)
{ cout << "enter n\n";
Cin >> n;},где задавать размерность матрицы.
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
08.09.2014, 19:18 8
Цитата Сообщение от zss Посмотреть сообщение
int summa (const int& **ar,int n)
Может, всё-таки, так?
C++
1
int summa (const int**& ar, int n)[
1
Модератор
Эксперт С++
13334 / 10635 / 6354
Регистрация: 18.12.2011
Сообщений: 28,408
08.09.2014, 19:25 9
Цитата Сообщение от alsav22 Посмотреть сообщение
Может, всё-таки, так
Пардон, опечатушки.
Мне наглядней так
C++
1
int summa (const int** &ar, int n)
ar является ссылкой на переменную типа int**
0
gray_fox
09.09.2014, 10:50     Реализовать передачу параметров по ссылке для приведенной задачи с матрицей
  #10

Не по теме:

Цитата Сообщение от zss Посмотреть сообщение
C++
1
int summa (const int** &ar, int n)
ar является ссылкой на переменную типа int**
Всё таки ссылка на const int **. Cсылка на константу int ** будет int ** const&

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2014, 10:50

Реализовать программу одним из способом передачи параметров в функцию(по адресу,по значению,по ссылке)
Даны координаты вершин двух треугольников. Определить, какой из них имеет большую площадь. ...

Создать блок-схему и программу на языке Pascal для приведенной задачи
Создать блок-схему и программу на языке Pascal для приведенной задачи

Создать блок-схему и программу на языке Pascal для приведенной задачи
Создать блок-схему и программу на языке Pascal для приведенной задачи

Создать блок-схему и программу на языке Pascal для приведенной задачи
Создать блок-схему и программу на языке Pascal для приведенной задачи


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru