Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Funkcja przyjmujaca dowolna liczbe parametrow

Ostatnio zmodyfikowano 2013-08-22 14:04
Autor Wiadomość
Nowicjusz
Temat założony przez niniejszego użytkownika
Funkcja przyjmujaca dowolna liczbe parametrow
» 2013-03-07 03:45:04
Czesc czy wiecie moze jak napisac funkcje ktora przyjmuje n parametrow, moge podac np:

C/C++
fun( 1, 2, 3, 4, 5 );
fun( 1 );
fun( 1, 2, 3, 5, 28, 7, 8, 9 );
/*
itd...
*/


P-77848
xevuel
» 2013-03-07 06:49:32
P-77850
Monika90
» 2013-03-07 20:12:25
A w C++ masz do tego Variadic Templates albo std::initializer_list<int>
P-77871
crash
» 2013-03-08 18:57:38
Monika90@ to o czym napisałaś jest w najnowszym standardzie, więc najnowsze kompiladło jest do tego potrzebne. Tak tylko wspominam.

Osobiście używam http://edu.pjwstk.edu.pl/wyklady/pro/scb/PRG2CPP_files/node68.html

Sry za brak oznaczenia jako link ale wiecznie tego nie pamiętam, jak się w link zamienia ;p

PS: Google -> C++ zmienna lista argumentów
P-77937
Elaine
» 2013-03-09 15:04:59
Monika90@ to o czym napisałaś jest w najnowszym standardzie, więc najnowsze kompiladło jest do tego potrzebne.
Bez przesady, variadic templates były w GCC 4.3, czyli kompilatorze z 2008, obecnie mamy 2013 (i GCC 4.8, które na dniach powinno wejść w fazę RC).
P-77971
Nowicjusz
Temat założony przez niniejszego użytkownika
» 2013-03-09 16:24:51
tego Variadic Templates  mi nie znajduje visual 2012

@Crash a mozesz mi napisac czy da sie jakos sprawdzic rozmiar tych danych albo chociaz sprawdzic czy aktualny element nie jest ostatnim ?
P-77981
usmiech
» 2013-03-09 17:18:06
Nie wiem do czego potrzebujesz funkcje akceptjaca kazda ilosc argumentow. Byc moze do obliczania sredniej. Rozumiem, ze nie wiesz jak wiele argumentow bedzie przekazanych do funkcji. Jedna z drog do osiagniecia tego moze byc uzycie wskaznikow do tablicy, ale druga droga to uzycie jednej z bibliotek C++ , ktora 'akceptuje' funkcje ze zmienna liczba argumentow, albo raczej funkcje bez okreslonego zbioru argumentow. Mozesz uzyc plik cstdarg w headersie /#include <cstdarg>/. Poniewaz funkja deklarowana jest z nieogrsanoczona lista argumentow to w miejscu ostatniego argumentu wstawia sie '...'. Wiec przykladowa func(int x, ...) powie kompilatorowi, ze funkcja ma nieogranoczona ilosc argumentow /przynajmniej jeden, ktory rowna sie x/. Pozdrawiam :)

Oki, przykladowy kod na obliczanie sredniej
C/C++
#include "stdafx.h"
#include <cstdarg>
#include <iostream>

using namespace std;


double srednia( int liczba,...)
{
    va_list argumenty;
    double suma = 0;
   
    va_start( argumenty, liczba );
    for( int x = 0; x < liczba; x++ )
         suma += va_arg( argumenty, double );
   
    va_end( argumenty );
   
    return suma / liczba;
    int main()
    {
        // przylkladowe liczby : 18.5, 142.8, 15.4 (3 to ilosc liczb - int x, tutaj liczba)
        cout << srednia( 3, 18.5, 142.8, 15.4 ) << endl;
        // tym razem 10 zmiennych
        cout << srednia( 10, 3.5, 12.2, 1.8, 8.5, 12.4, 11.0, 4.8, 8.2, 58.0, 148.2 ) << endl;
       
       
    }
P-77986
Nowicjusz
Temat założony przez niniejszego użytkownika
» 2013-03-09 17:23:29
dzieki, ale zaproponowales to co @crash :D, probowalem juz tego ale nie wiem jak sprawdzic ile agrumentow przeslalismy. Ale skoro nigdy wczesniej tego nie widzialem to moze faktycznie zadko kiedy sie uzywa, moze faktycznie przesle za pomoca tablicy :D Ale tak z czystej ciekawosci chcialbym wiedziec czy jednak da sie jakos sprawdzic ile argumentow sie przeslalo
P-77987
« 1 » 2
  Strona 1 z 2 Następna strona