• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekazywanie całej tablicy do funkcji C++

Object Storage Arubacloud
0 głosów
1,028 wizyt
pytanie zadane 14 kwietnia 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)

Cześć !

Mam pytanie jak przekazać całą tablice do funkcji calculate(); ?

Mam kod:

main.cpp:

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include "list.h"
using namespace std;

int main()
{
HANDLE uchwyt = GetStdHandle(STD_OUTPUT_HANDLE);//Uchwyt kolory

  char choice;
  bool l_main=true;

      while( l_main )
      {
         system("cls");
         SetConsoleTextAttribute(uchwyt,7);
         cout<<"|===================|"<<endl;
         SetConsoleTextAttribute(uchwyt, 9);
         cout<<"     KalkulatorV2    "<<endl;
         SetConsoleTextAttribute(uchwyt,7);
         cout<<"|===================|"<<endl;
         cout<<"    [1] Dodawanie    "<<endl;
         cout<<"    [2] Odejmowanie  "<<endl;
         cout<<"    [3] Mnozenie     "<<endl;
         cout<<"    [4] Dzieleie     "<<endl;
         cout<<"    [5] Wyjscie      "<<endl;
         cout<<"      Wybor:";
         choice=getch();

         if((choice>='6')||(choice=='0'))
         {
            SetConsoleTextAttribute(uchwyt, 14);
            cout<<endl;
            cout<<" Nie ma takiej opcji w menu!"<<endl;
            Sleep(1000);
         }

         if(choice=='5')
         {
            exit(0);
         }

         if(choice=='1')
         {
            Addition o1;
            o1.input_M();
            o1.calculate(); // Co tu wpisac ?
         }

      }//Petla glowna
}//int main

.h:

class Addition //Dodawanie
{
 public:

   float input[100];
   float score;
   int counter;

   float input_M(); //Wejscie

   void control(int i=0);

   float calculate(float input[]); //co tu wpisac?
};

.cpp //metody:

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include "list.h"
using namespace std;

HANDLE uchwyt = GetStdHandle(STD_OUTPUT_HANDLE);//Uchwyt kolory

float Addition::input_M()
{
    bool l_inCounter=true;
    bool l_input=true;

    while( l_inCounter )
    {
       l_inCounter=true;
       l_input=true;
       system("cls");
       SetConsoleTextAttribute(uchwyt,7);
       cout<<"|=====================|"<<endl; SetConsoleTextAttribute(uchwyt, 9);
       cout<<"       Dodawanie       "<<endl; SetConsoleTextAttribute(uchwyt,7);
       cout<<"    Ile liczb dodac:";
       cin>>counter;
       if((!(counter))||(counter<0))
       {
          control(counter);
       }
       else
       {
          l_inCounter=false;
       }
    }
     SetConsoleTextAttribute(uchwyt,7);
     cout<<"|======================|"<<endl;
     for(int i=1; i<=counter;)
     {
        l_input=true;
         while( i<=counter )
         {
           SetConsoleTextAttribute(uchwyt,7);
           cout<<"  Podaj:"<<i<<" liczbe:";
           cin>>input[i];
           control(i);
           i++;
           l_input=false;
         }
     }

}


void Addition::control(int i)
{
    bool l_inCounter=true;
    bool l_input=true;

    if((!(counter))||(counter<0))
    {
      cout<<endl; SetConsoleTextAttribute(uchwyt, 12);
      cout<<" Blad! Nieprawidlowe wejscie!"<<endl;
      Sleep(1000);
      cin.clear();
      cin.ignore(1000,'\n');
    }
    else
    {
      l_inCounter=false;
    }

    if(!(input[i]))
    {
      cout<<endl; SetConsoleTextAttribute(uchwyt, 12);
      cout<<" Blad! Nieprawidlowe wejscie!"<<endl;
      Sleep(1000);
      cin.clear();
      cin.ignore(1000,'\n');
    }
    else
    {
      l_input=false;
    }
}


float Addition::calculate(float input[])  //co tu wpisac ?
{
 cout<<"Dziala"<<endl;
 system("pause");
}

Z góry dzięki za odpowiedź ! :)

3 odpowiedzi

+1 głos
odpowiedź 14 kwietnia 2016 przez Radfler VIP (101,030 p.)
wybrane 14 kwietnia 2016 przez TheFeniks
 
Najlepsza
Po co przekazywać tablicę przez argument, skoro znajduje się ona w klasie?
komentarz 14 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)

Jesteś wielki!

Serdecznie dziękuje za pomoc i cierpliwość! :D

komentarz 14 kwietnia 2016 przez draghan VIP (106,230 p.)
Na zdrowie. ;)

Ups, nie zwróciłem uwagi, że to pod postem Radflera, a nie moim... :o Przepraszam, Radfler, za zabranie Ci tej przyjemności. :/
komentarz 14 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
Heh

To komu teraz dać najlepszą odp ? xd
komentarz 14 kwietnia 2016 przez draghan VIP (106,230 p.)
Radfler wcześniej domyślił się, o co Ci chodzi. ;)
komentarz 14 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
No to w takim razie czeka go niespodzianka ! :D
+1 głos
odpowiedź 14 kwietnia 2016 przez draghan VIP (106,230 p.)

Potrzebujesz jeszcze rozmiaru tablicy, jeśli chcesz poprawnie z nią pracować - chyba że zakładasz że jest ona zawsze 100-elementowa i koniec. Ogólnie dobrze napisałeś deklarację metody calculate(). W jej wywołaniu podawaj adres na zerowy element tablicy.

float Addition::calculate(float input[])
{
// nie wiem, co chcesz zrobić, więc przepiszę wartości z argumentu do pola
// zakładam że tablica wejściowa ma 100 elementów
 for(size_t i = 0; i < 100; ++i)
 {
     this -> input[i] = input[i];
 }
 cout<<"Dziala"<<endl;
 system("pause");
}

// ...

Addition foo;
float tab[100];
// ...wypełnij tablicę danymi
foo.calculate(tab);

 

komentarz 14 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
Przepraszam ale nie rozumiem.

W funkcji calculate chcę poprostu zrobić pętle for która będzie zsumować wszystkie liczby zawarte w tej tablicy i potem przekazać wynik do jeszcze nie istniejącej funkcji.

Więc jak zrobić te zsumowanie ?
komentarz 14 kwietnia 2016 przez draghan VIP (106,230 p.)

Chwila. Co dokładnie chcesz sumować? Liczby z tablicy, podanej w argumencie? Liczby z tablicy, która jest polem klasy Addition? Czy może zsumować liczby z tablicy z argumentu z liczbami z tablicy pola klasy?

potem przekazać wynik do jeszcze nie istniejącej funkcji.

A tego to już zupełnie nie rozumiem. Ale najpierw określmy precyzyjnie, co chcesz sumować, potem zastanowimy się nad resztą. ;)

komentarz 14 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
Liczby wczytane w pętli for w metodzie input_M();
komentarz 14 kwietnia 2016 przez draghan VIP (106,230 p.)

W takim wypadku nic nie musisz przekazywać jawnie jako argument. Wewnątrz metody masz dostęp do składowych obiektu i nie musisz dodatkowo przekazywać ich przez argument (chociaż i tak się da, gdyby się ktoś UPARŁ).

float Addition::calculate() // metoda bez argumentów! 
{
// tutaj masz normalnie dostęp do tablicy input[], jako że jest ona częścią składową obiektu, dla którego wywołujesz tę metodę
// Czyli możesz prostą pętelką to zsumować i zwrócić wynik
   float sum = input[0] + input[1]; // GŁUPI przykład
   return sum;
}

 

0 głosów
odpowiedź 14 kwietnia 2016 przez Sedi Stary wyjadacz (10,200 p.)
edycja 14 kwietnia 2016 przez Sedi

Zawsze może w swojej:

float Addition::input_M()

wywołać metodę calculate(input) i tyle. Po prostu bez obiektu.

PS. Po co Ci Addition::input_M(), typu float skoro nic nie zwraca ?

komentarz 14 kwietnia 2016 przez TheFeniks Gaduła (4,690 p.)
Właśnie jak wkleiłem kod to zauważyłem. :P

Podobne pytania

0 głosów
2 odpowiedzi 9,301 wizyt
0 głosów
1 odpowiedź 345 wizyt
0 głosów
1 odpowiedź 455 wizyt
pytanie zadane 3 kwietnia 2019 w C i C++ przez mr.wo!tman Nowicjusz (120 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...