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

Рекурсия. Среднее значение в двумрном массиве - C++

Восстановить пароль Регистрация
 
HOK_
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 3
07.11.2012, 15:03     Рекурсия. Среднее значение в двумрном массиве #1
Доброе время суток.
Помогите пожалуйста с задачей: Напишите рекурсивную функцию, которая находит среднее арифметическое наибольшего и наименьшего элемента главной диагонали матрицы А(5х5).

Вот функция которая находит среднее арифметическое без рекурсии.
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
float calc_y_(int a[n][n])
{
float y=0;
int i, min, max;
min=a[0][0];
for(i=0; i<n; i++)
{
    if(min>a[i][i]) min=a[i][i];
}
max=a[0][0];
for(i=0; i<n; i++)
{
    if(max<a[i][i]) max=a[i][i];
}
y=(float)(min+max)/2;
return y;
}
 
  Также 2 рекурсии которые находят среднее арифметическое (но не как в условии).
float rec_mas(int a[n][n],int i,int j, float k)
{
if(j==n-1) return (float)(k+a[i][j])/(j+1);
else {
    k=k+a[i][j];
    return rec_mas(a,i,j+1,k);
}
}
 
 
float recurs(int a[n][n], int i, int j, float s)
{   
if (i==n-1){
    s=s+rec_mas(a,i,0,0);
    return s/(i+1);
} 
else {
        
    s=s+rec_mas(a,i,0,0);
    return recurs(a,i+1,j,s);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2012, 15:03     Рекурсия. Среднее значение в двумрном массиве
Посмотрите здесь:

C++ Среднее значение элементов в одномерном массиве
Как найти среднее значение в одномерном массиве? C++
C++ В одномерном массиве вычислить среднее значение положительных элементов массива
C++ Среднее значение полученных чисел, количество значений в массиве, превышающих среднее
Рекурсия. Среднее значение C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ExcellencE
20 / 20 / 2
Регистрация: 22.08.2011
Сообщений: 79
07.11.2012, 16:31     Рекурсия. Среднее значение в двумрном массиве #2
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <time.h>
 
using namespace std;
 
int arr[5][5] = { {1,2,3,4,5},{5,4,3,2,0},{1,2,3,4,5},{5,4,3,2,0},{3,7,1,1,2}};
 
 
int maxx(int i)
{
    if(i<0) return 0;
    return (arr[i][i] > maxx(i-1)) ?arr[i][i] : maxx(i-1);
}
 
int minn(int i)
{
    if(i<0) return 0;
    return (arr[i][i] < minn(i-1)) ? arr[i][i] : minn(i-1);
}   
 
int main(int argc, char* argv[])
{
    double x = ((maxx(4)+minn(4))/2.0);
    cout<<x;
   getch();
   return 0;
}
HOK_
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 3
07.11.2012, 16:56  [ТС]     Рекурсия. Среднее значение в двумрном массиве #3
ExcellencE спасибо, но тут же 2 рекурсии + сами вычисления в главной проге. Я просто хочу узнать как записать все эти вычисления в одну рекурсию?
ExcellencE
20 / 20 / 2
Регистрация: 22.08.2011
Сообщений: 79
07.11.2012, 17:38     Рекурсия. Среднее значение в двумрном массиве #4
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//алгоритм на языке java 
  public static void qSort(int[] A, int low, int high) {
      int i = low;
      int j = high;
      int x = A[(low+high)/2];
      do {
          while(A[i] < x) ++i;
          while(A[j] > x) --j;
          if(i <= j){
              int temp = A[i];
              A[i] = A[j];
              A[j] = temp;
              i++; j--;
          }
      } while(i < j);
 
      if(low < j) qSort(A, low, j);
      if(i < high) qSort(A, i, high);
  }
думаю, модифицировав эту штуку можно получить то, что вам нужно
HOK_
0 / 0 / 0
Регистрация: 07.11.2012
Сообщений: 3
07.11.2012, 18:26  [ТС]     Рекурсия. Среднее значение в двумрном массиве #5
Джава)) Если бы кто то написал на С++ было бы легче...
gevru
1 / 1 / 0
Регистрация: 17.03.2010
Сообщений: 29
07.11.2012, 22:39     Рекурсия. Среднее значение в двумрном массиве #6
В синтаксисе могу ошибаться (давно на C++ не писал) но как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int arr[5][5] = {{1,2,3,4,5},{6,7,8,9,0},{7,8,9,0,1},{8,9,0,1,2},{9,0,1,2,3}};
 
float process(int[][] arr, int i, int n, int min, int max){
    if (i < n) {
        min = arr[i][i] < min ? arr[i][i] : min;
        max = arr[i][i] > max ? arr[i][i] : max;
        return process(arr, ++i, n, min, max);
    } else {
        return (float)( (min + max) / 2 );
    }
}
 
void main() {
    float srednee = process(arr, 0, 5, arr[0][0], arr[0][0]);
}
На JavaScript точно рабочий вариант:
Javascript
1
2
3
4
5
6
7
8
9
10
11
var arr = [[1,2,3,4,5],[6,7,8,9,0],[7,8,9,0,1],[8,9,0,1,2],[9,0,1,2,3]];
function process(arr, i, n, min, max){
    if (i < n) {
        min = arr[i][i] < min ? arr[i][i] : min;
        max = arr[i][i] > max ? arr[i][i] : max;
        return process(arr, ++i, n, min, max);
    } else {
        return (min + max) / 2;
    }
}
process(arr, 0, 5, arr[0][0], arr[0][0]);
Если в варианте на C++ ошибся, прошу поправьте где.
Yandex
Объявления
07.11.2012, 22:39     Рекурсия. Среднее значение в двумрном массиве
Ответ Создать тему
Опции темы

Текущее время: 03:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru