przekazanie zmiennych przez funkcję pośredniczącą

Odpowiedz Nowy wątek
2011-09-13 06:37
0

czy jest jakiś sposób żeby funkcja_52 robiła to samo co funkcja_12 czyli pobierała kilka danych z funkcji pośredniczącej w której w zależności od flag dane się zmieniają w różnych miejscach programu przykładowy program:


#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <conio.h> 
#include <iostream>
#include <windows.h>

using namespace std;
//////////////////////////////
//////////////////////////////
void funkcja_11(int &a,int &b,int &c);
void funkcja_12(void (*wskaznik_na_funkcje)(int&,int&,int&),int &a1,int &b1,int &c1); 
//////////////////////////////
void funkcja_51(int &a,int &b,int &c);
void funkcja_52(void (*wskaznik_na_funkcje)(int&,int&,int&)); 
//////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
    int nowy_nr1=2,nowy_nr2=5,nowy_nr3=7;
    cout<<"stary_nr1="<<nowy_nr1<<" stary_nr2="<<nowy_nr2<<" stary_nr3="<<nowy_nr3<<endl;
    funkcja_12(funkcja_11,nowy_nr1,nowy_nr2,nowy_nr3);
    cout<<"nowy_nr1="<<nowy_nr1<<" nowy_nr2="<<nowy_nr2<<" nowy_nr3="<<nowy_nr3<<endl;
    cout<<"koniec testu 1 z 2 "<<endl;
    system("pause");
    int nr1=10,nr2=12,nr3=14;
    cout<<"nr1="<<nr1<<" nr2="<<nr2<<" nr3="<<nr3<<endl;
    funkcja_51(nr1,nr2,nr3);
    funkcja_52(funkcja_51);
    cout<<"koniec testu 2 z 2 "<<endl;
    system("pause");
    return 0;
}//int _tmain
//////////////////////////////
void funkcja_11(int &a,int &b,int &c)
{
    a=a+5;
    b=b-2;
    c=c+3;
}
//////////////////////////////
void funkcja_12(void (*wskaznik_na_funkcje)(int&,int&,int&),int &a1,int &b1,int &c1)
{
(*wskaznik_na_funkcje)(a1,b1,c1);
}
//////////////////////////////
void funkcja_51(int &a,int &b,int &c)
{
cout<<"przechowywalnia"<<endl;
cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;    
}
//////////////////////////////
void funkcja_52(void (*wskaznik_na_funkcje)(int&,int&,int&))
{
    int pobrany_nr1=0,pobrany_nr2=0,pobrany_nr3=0;
    (*wskaznik_na_funkcje)(pobrany_nr1,pobrany_nr2,pobrany_nr3);
    cout<<"pobrany_nr1="<<pobrany_nr1<<" pobrany_nr2="<<pobrany_nr2<<" pobrany_nr3="<<pobrany_nr3<<endl;
}

Pozostało 580 znaków

2011-09-13 07:15
0

Użyj 'static'. Dzięki temu będziesz mógł odwołać się do potrzebnych informacji. Możesz też użyć funktorów (struct z operatorem ()).

Pozostało 580 znaków

2011-09-13 07:24
0

ok narazie z static zrobiłem to i działa:
(jednak to jest za pomocą szablonu z tej innej funkcji)


#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <cstdio>
#include <stdlib.h>
#include <conio.h> 
#include <iostream>
#include <windows.h>

using namespace std;

//////////////////////////////
void funkcja_karty_w_rece_1(int &karta1,int &karta2,int &karta3,int &karta4,int &karta5,int flaga);
void funkcja_karty_w_rece_2(void (*wskaznik_na_funkcje)(int&,int&,int&,int&,int&,int),int &karta1_1,int &karta2_1,int &karta3_1,int &karta4_1,int &karta5_1);
void obliczenie_prawdopodobienstwo_start_();
//////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
    int karta1=5,karta2=1,karta3=10,karta4=50,karta5=25,flaga=1;//1=zapis,2=odczyt
    cout<<"karta1="<<karta1<<" karta2="<<karta2<<" karta3="<<karta3<<" karta4="<<karta4<<" karta5="<<karta5<<endl;
    funkcja_karty_w_rece_1(karta1,karta2,karta3,karta4,karta5,flaga);
    obliczenie_prawdopodobienstwo_start_();
    system("pause");
    return 0;
}//int _tmain
//////////////////////////////
void funkcja_karty_w_rece_1(int &karta1,int &karta2,int &karta3,int &karta4,int &karta5,int flaga)
{
    int static temp1=0,temp2=0,temp3=0,temp4=0,temp5=0;
    if(flaga==1)
    {
    temp1=karta1;
    temp2=karta2;
    temp3=karta3;
    temp4=karta4;
    temp5=karta5;
    }
    if(flaga==2)
    {
    karta1=temp1;
    karta2=temp2;
    karta3=temp3;
    karta4=temp4;
    karta5=temp5;
    }
}
void funkcja_karty_w_rece_2(void (*wskaznik_na_funkcje)(int&,int&,int&,int&,int&,int),int &karta1_1,int &karta2_1,int &karta3_1,int &karta4_1,int &karta5_1,int flaga)
{
    (*wskaznik_na_funkcje)(karta1_1,karta2_1,karta3_1,karta4_1,karta5_1,flaga);
}
//////////////////////////////
void obliczenie_prawdopodobienstwo_start_()
{
int karta1=0,karta2=0,karta3=0,karta4=0,karta5=0,flaga=2;//1=zapis,2=odczyt
funkcja_karty_w_rece_2(funkcja_karty_w_rece_1,karta1,karta2,karta3,karta4,karta5,flaga);//funkcja posredniczy w przekazywaniu danych
cout<<"w void obliczenie_prawdopodobienstwo_start_();"<<endl;
cout<<"karta1="<<karta1<<" karta2="<<karta2<<" karta3="<<karta3<<" karta4="<<karta4<<" karta5="<<karta5<<endl;
}
//////////////////////////////
edytowany 1x, ostatnio: rewertyn, 2011-09-13 07:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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