Przekazywanie tablicy do funkcji

0
#include <iostream>
#include <cmath>
using namespace std;

const double* aver(const double* arr,
    size_t size, double& average);

int main()
{
    double arr[] = { 1, 2, 3, 4, 5, 7 };
    double cos;
    size_t size = sizeof(arr) / sizeof(arr[0]);
    double average = 0;
    //const double* p = aver(arr, size, average);
    //cout << *p << " " << average << endl;

    double suma;
    //wyliczamy sume
    for (int i = 0; i < size; i++) {
        suma += arr[i];
    }
    average = suma / 6;
    cout << average << endl;
    double c;
    c = abs(average - arr[0]);
    cout << c;
}

const double* aver(const double& arr, size_t size, double& average)
{
    double a, o1, o2, o3, o4, o5, o6;
    a = abs(average - arr[0]);
    o1 = abs(average - *arr[1]);
    o2 = abs(average - &arr[2]);
    o3 = abs(average - arr[3]);
    o4 = abs(average - arr[4]);
    o5 = abs(average - arr[5]);
    o6 = abs(average - arr[6]);
}

W funkcji main działa ale jak próbuje przekazać do funkcji to dostaje błąd
declaration of 'arr' as array of references|

Kompletnie zgłupiałem i nie wiem jak to przekazać ;[

1

Na pewno piszesz o tym samym kodzie, który wkleiłeś? Tutaj nie deklarujesz nigdzie tablicy referencji.

1

Twoja funkcja powinna wyglądać tak:

const double *aver(const double arr[], size_t size, double *average) { ... }

Później możesz dostać się do poszczególnych elementów tak jak w normalnej tablicy (tj. arr[0], arr[1] itd.).

Aby przekazać tablicę do funkcji używasz po prostu jej nazwy:

aver(arr, size, &average);
0
kq napisał(a):

Na pewno piszesz o tym samym kodzie, który wkleiłeś? Tutaj nie deklarujesz nigdzie tablicy referencji.

próbuje dostać się do tablicy z main:

double arr[] = { 1, 2, 3, 4, 5, 7 };
1

W żaden sposób nie odpowiedziałeś na moje pytanie.

declaration of 'arr' as array of references|

Której linii to dotyczy?

0
kq napisał(a):

W żaden sposób nie odpowiedziałeś na moje pytanie.

declaration of 'arr' as array of references|

Której linii to dotyczy?

||=== Build: Debug in Doppowturki (compiler: GNU GCC Compiler) ===|
G:\Projekty c++\Doppowturki\main.cpp||In function 'int main()':|
G:\Projekty c++\Doppowturki\main.cpp|19|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
G:\Projekty c++\Doppowturki\main.cpp|11|warning: unused variable 'cos' [-Wunused-variable]|
G:\Projekty c++\Doppowturki\main.cpp||In function 'const double* aver(const double&, size_t, double&)':|
G:\Projekty c++\Doppowturki\main.cpp|35|error: invalid types 'const double[int]' for array subscript|
G:\Projekty c++\Doppowturki\main.cpp|36|error: invalid types 'const double[int]' for array subscript|
G:\Projekty c++\Doppowturki\main.cpp|37|error: invalid types 'const double[int]' for array subscript|
G:\Projekty c++\Doppowturki\main.cpp|38|error: invalid types 'const double[int]' for array subscript|
G:\Projekty c++\Doppowturki\main.cpp|39|error: invalid types 'const double[int]' for array subscript|
G:\Projekty c++\Doppowturki\main.cpp|40|error: invalid types 'const double[int]' for array subscript|
G:\Projekty c++\Doppowturki\main.cpp|41|error: invalid types 'const double[int]' for array subscript|
G:\Projekty c++\Doppowturki\main.cpp|44|warning: no return statement in function returning non-void [-Wreturn-type]|
||=== Build failed: 7 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===|
1

Jak widzisz, nie ma nic takiego. Podawanie błędów do innego kodu, niż ten o który pytasz mija się z celem.

0
kq napisał(a):

Jak widzisz, nie ma nic takiego. Podawanie błędów do innego kodu, niż ten o który pytasz mija się z celem.

Wysyłam scr bo widzę że mi nie wierzysz ;[

1

double& arr - to nie jest tablica.

1

I gdzie tam masz declaration of 'arr' as array of references|?

0

Nie mam pojęcia co zle robię musi być jakiś sposób żeby to przekazać abs(average - arr[0]); przekazać do funkcji w main mam:

double c;
c = abs(average - arr[0]);

i się kompiluje.

#include <iostream>
#include <cmath>
using namespace std;

const double* aver(const double* arr,
    size_t size, double& average);

int main()
{
    double arr[] = { 1, 2, 3, 4, 5, 7 };
    double cos;
    size_t size = sizeof(arr) / sizeof(arr[0]);
    double average = 0;
    //const double* p = aver(arr, size, average);
    //cout << *p << " " << average << endl;

    double suma;
    //wyliczamy sume
    for (int i = 0; i < size; i++) {
        suma += arr[i];
    }
    average = suma / 6;
    cout << average << endl;
    double c;
    c = abs(average - arr[0]);
    cout << c;
}

const double* aver(const double& arr, size_t size, double& average)
{
//    double a, o1, o2, o3, o4, o5, o6;
//    a = abs(average - arr[0]);
//    o1 = abs(average - arr[1]);
//    o2 = abs(average - arr[2]);
//   o3 = abs(average - arr[3]);
//   o4 = abs(average - arr[4]);
//    o5 = abs(average - arr[5]);
//    o6 = abs(average - arr[6]);
}

W takiej postaci mi się kompiluje ale gdy próbuje użyć takiej formy w funkcji to wywala błędy ;[
np użycie

double a;
a = abs(average - arr[0]);

Generuje

||=== Build: Debug in Doppowturki (compiler: GNU GCC Compiler) ===|
G:\Projekty c++\Doppowturki\main.cpp||In function 'int main()':|
G:\Projekty c++\Doppowturki\main.cpp|19|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
G:\Projekty c++\Doppowturki\main.cpp|11|warning: unused variable 'cos' [-Wunused-variable]|
G:\Projekty c++\Doppowturki\main.cpp||In function 'const double* aver(const double&, size_t, double&)':|
G:\Projekty c++\Doppowturki\main.cpp|32|error: invalid types 'const double[int]' for array subscript|
G:\Projekty c++\Doppowturki\main.cpp|40|warning: no return statement in function returning non-void [-Wreturn-type]|
||=== Build failed: 1 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===|

ta definicja jest z zadania const double* aver(const double* arr, size_t size, double& average);
abs chce użyć by móc znaleźć najbliższą średniej liczbę z tab arr którą zadeklarowałem na początku main.

1

Na to już odpowiedział @atmal wyżej.

0
kq napisał(a):

Na to już odpowiedział @atmal wyżej.

W zadaniu miałem Napisz funkcję o prototypie

const double* aver(const double* arr, size_t size, double& average);

Wiec założyłem że da rade użyć tablicy bez jej kopiowania.

1

double *arr oznacza to samo co double arr[] (w pewnym sensie). W obu wypadkach tablica przekazywana jest jako wskaźnik na pierwszy element.

Tak samo z przekazywaniem tablicy do funkcji - istnieje kilka zapisów:

int arr[] = {2, 3, 4};
fun(arr); // Można zrobić tak
// Albo tak:
fun(&arr[0]);
0

Super dzięki wielkie ;]

#include <iostream>
#include <cmath>
using namespace std;

const double* aver(const double arr[],size_t size, double* average);

int main()
{
   double arr[] = { 1, 2, 3, 4, 5, 7 };

   size_t size = sizeof(arr) / sizeof(arr[0]);
   double average = 0;
   double suma;

   for (int i = 0; i < size; i++) {
       suma += arr[i];
   }
   average = suma / 6;


   const double* p = aver(arr, size, &average);
   cout << *p << " " << average << endl;

}

const double* aver(const double arr[], size_t size, double* average)
{


double m,kture;
const double &refk=kture;
double a, o1, o2, o3, o4, o5, o6;
   a = abs(*average - arr[0]);
   o1 = abs(*average - arr[1]);
   o2 = abs(*average - arr[2]);
   o3 = abs(*average - arr[3]);
   o4 = abs(*average - arr[4]);
   o5 = abs(*average - arr[5]);
   o6 = abs(*average - arr[6]);

   a=m;
   kture=arr[0];
   if (m>o1){m=o1;kture=arr[1];};
   if (m>o2){m=o2;kture=arr[2];};
   if (m>o3){m=o3;kture=arr[3];};
   if (m>o4){m=o4;kture=arr[4];};
   if (m>o5){m=o5;kture=arr[5];};
   if (m>o6){m=o6;kture=arr[6];};

return &refk;
}

mam jeszcze jakiś mały błąd tylko kompilator nic nie widzi a programik raz pokazuje 1 a raz 4 ( 4 powinno za każdym razem pokazywać.)

1

W tym miejscu:

a = m;

Używasz niezainicjalizowanej zmiennej m i przypisujesz jej wartość do a - Undefined Behaviour.

Przy okazji - wywal te średniki za ifami - są zbędne.

Oraz kompiluj z flagami -Wall i -pedantic aby kompilator wyłapywał więcej błędów.

0
<facepalm> Faktycznie powinno być m=a; poza tym jak zwykle policzyłem od 1do6 zamiast od 0do5 XD Dzięki wielkie za pomoc <3

1 użytkowników online, w tym zalogowanych: 0, gości: 1