Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
2 / 2 / 1
Регистрация: 21.09.2017
Сообщений: 87
1

Ссылки и массив

14.02.2018, 14:46. Показов 1333. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В алгоритме решения задачи выделить необходимые функции (как правило, это повторяющаяся последовательность действий). Функция должна возвращать несколько значений, для реализации этого использовать ссылки. В программе продемонстрировать вызов функции.

16. Вычислить значение величины
T=(max(A)*min(A+B)-max(B))/(max(A+B)+min(A)*min(B)), где A, B и C – массивы размерности 10. Значение максимума и минимума для одного массива вычислять в одной функции.

Программа не дописана до конца, я не совсем понимаю, как использовать ссылку в функциях и как потом всё это вызывать. Пытался читать в интернете, но информации по ссылкам нашёл немного. Прошу помочь дописать программу.

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
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <ctime>
#include <string.h> 
using namespace std;
void Mass1(int A[], int &max, int &min)
{
    int n=0, razm=10;
    for(int n=0;n<razm;n++)
    if(A[min]>A[n]) min=n;
    for(int n=0;n<razm;n++)
    if (A[max]<A[n]) max=n; 
}
int Mass2(int B[], int &max, int &min)
{
    int n=0, razm=10;
    for(int n=0;n<razm;n++)
    if(B[min]>B[n]) min=n;
    for(int n=0;n<razm;n++)
    if (B[max]<B[n]) max=n; 
}
int Mass3(int C[], int &max, int &min)
{
    int n=0, razm=10;
    for(int n=0;n<razm;n++)
    if(C[min]>C[n]) min=n;
    for(int n=0;n<razm;n++)
    if (C[max]<C[n]) max=n;
}
int main()
{
    setlocale(0,"rus");         
    srand(time(NULL)); 
    const int p=10;
    int  A[p], B[p], C[p], i;
    for (i=0;i<p;i++)
    { 
    A[i]=rand()%100-50; cout<<A[i]<<"   "; 
    }
    cout<<"|||  "; 
       
    for (i=0;i<p;i++)   
    {
    B[i]=rand()%100-50; cout<<B[i]<<"   ";
    }
    cout<<"|||  ";
    
     for (i=0;i<p;i++)   
    {
    C[i]=rand()%100-50; cout<<C[i]<<"   ";
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2018, 14:46
Ответы с готовыми решениями:

Указатель, ссылки, массив. C++
Всем доброго времени суток. Хотел задать вопрос. Почему без ухищрений нельзя передать...

Передача ссылки на массив в функцию
запутался в 3 соснах... Помахайте плиз) //обьявляю и инициализирую функцию void fShow(char...

Получение файла в массив из ссылки
$fnames=date(&quot;d.m.y_H:i:s&quot;); $mime=$_FILES; $fileformat ='.csv'; if ($mime!='text/csv' &amp;&amp;...

Непонятное объявление ссылки на массив
Помогите пожалуйста разобраться... есть шаблон: template &lt;typename Type, int size&gt; Type min(...

6
177 / 15 / 11
Регистрация: 05.12.2017
Сообщений: 131
14.02.2018, 15:13 2
NejdanX, на мой взгляд, вот тут дано неплохое пояснение http://cppstudio.com/post/429/.
От себя могу добавить, что ссылка не содержит значение переменной. а просто ссылается на некоторую переменную:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
int func(int &new_ref) 
{
   int newNum = new_ref;
   
   return newNum;
}
 
int main()
{
    setlocale(0,"rus");         
    
    int num = 15; // Объявляем переменную типа int и инициализируем ее значением 15;
    int &ref = num; // Объявляем ссылку на созданную переменную num;
 
    num += func(num) // передаем в качестве параметра ссылку на num, т.о. значение num увеличивается на num;
 
    num -= ref; // вычитаем из num значение, записанное в num, получаем num = 0;
}
1
Заблокирован
14.02.2018, 15:34 3
Лучший ответ Сообщение было отмечено NejdanX как решение

Решение

Цитата Сообщение от NejdanX Посмотреть сообщение
Значение максимума и минимума для одного массива вычислять в одной функции
тогда вроде так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int MaxMin(int* arr,int size,int &Min)
{
   int Max;
   Max=Min=0;
   for(int i=1; i<size; i++)
   {
     if(arr[Max]<arr[i]) Max=i;
     if(arr[Min]>arr[i]) Min=i;
   }
   Min=arr[Min];
   return arr[Max];
}
..............
int minA,maxA;
maxA=MaxMin(A,10,minA);
int minB,maxB;
maxB=MaxMin(B,10,minB);
int minAB=minA<minB?minA:minB;
int maxAB=maxA>maxB?maxA:maxB;
и т.д.
1
2 / 2 / 1
Регистрация: 21.09.2017
Сообщений: 87
14.02.2018, 16:12  [ТС] 4
Спасибо, я почитаю и попробую усвоить материал)

Добавлено через 3 минуты
Mans, у меня к вам вопрос, продолжением для последних строчек должно продолжаться таким образом? Или нужно добавить такие же условия для maxBC и minBC? И так же, простите мою глупость, но как это потом вызвать, то есть использовать для готовой формулы? Просто переписать её, как она есть или как-то по другому?
C++
1
2
3
4
5
6
7
8
9
maxA=MaxMin(A,10,minA);
int minB,maxB;
maxB=MaxMin(B,10,minB);
int minAB=minA<minB?minA:minB;
int maxAB=maxA>maxB?maxA:maxB;
int minC,maxC;
maxC=MaxMin(C,10,minC);
int minAC=minA<minC?minA:minC;
int maxAC=maxA>maxC?maxA:maxC;
0
Заблокирован
14.02.2018, 16:19 5
Цитата Сообщение от NejdanX Посмотреть сообщение
T=(max(A)*min(A+B)-max(B))/(max(A+B)+min(A)*min(B))
C++
1
int T=(maxA*minAB-maxB)/(maxAB+minA*minB);
вроде так
1
rikimaru2013
14.02.2018, 17:17
  #6

Не по теме:

MansMI, вас в детстве били кнопкой пробела по голове? Откуда такая ненависть?

0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
14.02.2018, 18:04 7
Лучший ответ Сообщение было отмечено NejdanX как решение

Решение

Цитата Сообщение от NejdanX Посмотреть сообщение
int *A[p], B[p], C[p]
В таком виде лучше использовать std::array<int, p>. И передавать ссылку, но функцию надо будет шаблонизировать, чтобы руками не забивать константы.

C++
1
2
3
4
template <std::size_t N>
void Mass1(std::array<int, N> &A, int &max, int &min);
// instead of
void Mass1(std::array<int, 10> &A, int &max, int &min);
Так как вы объявили std::array на 10 элементов, нужно указать это в обьявлении функции. Либо руками забить константу, либо дать шаблонам делать свое дело.

Тоже справедливо и для статических массивов:

C++
1
2
3
4
template <std::size_t N>
void Mass1(int A[N], int &max, int &min)
{
    for (std::size_t i = 0; i < N; ++i)
А главное, на не приходится передавать или узнавать размер, он уже есть в N

Добавлено через 38 минут
NejdanX, 1 в 1 по заданию
C++
1
2
3
4
5
6
7
8
9
#include <valarray>
 
int main()
{
    std::valarray<int> a{1,2,3,4,5,6,7,8,9,0},
        b{1,2,3,4,5,6,7,8,9,0},
        c{1,2,3,4,5,6,7,8,9,0};
    int T = (a.max() * (a + b).min() - b.max()) / ((a + b).max() + a.min() * b.min());
}
1
14.02.2018, 18:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2018, 18:04
Помогаю со студенческими работами здесь

Получить ссылку на подмассив из ссылки на массив
Допустим у меня есть двумерный массив размером 3 на 3, определенный вот так: int matr3 {{1, 2,...

Ссылки на скалярную переменную, хэш или массив
Задание вот такое: В текстовом файле находятся записи о книгах в библиотеке. В каждой строке...

Реализация ссылки на массив чисел в вызываемом модуле
К примеру, если в main() создан динамический массив чисел. Он передаётся в качестве входного...

При передаче ссылки на массив в функцию перестает работать запись
Добрый вечер. Проблема в следующем. Необходимо написать функцию, которая при помощи...


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

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