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

Problem - Przekazywanie returna z funkcji do funkcji

Cloud VPS
0 głosów
264 wizyt
pytanie zadane 17 maja 2017 w C i C++ przez Kamil Paradowski Użytkownik (620 p.)

Witam, mam problem z kodem. Pisząc w skrócie: Chciałbym, aby z funkcji a móc wyciągnąć zmienną h, którą mógłbym później podstawić do pętli w funkcji b jak i w funkcji c, jednakże nie wiem jak to mam uczynić. Napisałem taki kod na brudno jak na razie, proszę bardzo o udzielenie odpowiedzi na te pytanie, bo borykam się z tym kodem od 2 dni :D

 

#include <iostream>

int a();
void b();
float c();

int main()
{

    std::cout<<"Witaj! Podaj do 10-ciu ocen golfowych. Wpisanie liczby 0 przerywa program"<<std::endl;
    a();
    b();
    c();
    return 0;
}

int a()
{
    short d=10;
    float e[d];
    char g;
    int h=0;
    int x=0;
    for(int i=0; i<d; i++)
    {
        std::cout<<"Wynik #"<<i+1<<": ";
        std::cin>>e[i];
        std::cout<<"Jeszcze jedna ocena? Wpisz 't' (Tak) lub 'n' (Nie) : ";
        std::cin>>g;
        h=h+1;
        if (g == 'n')
            break;
        else if (g == 't')
            continue;
    }
    return h;
}
void b()
{
    a();
    short d=10;
    float e[d];
    std::cout<<a();
    std::cout<<"Oto wszystkie dane zawarte w tablicy: "<<std::endl;
    for(int i=0; i<a(); i++)
        std::cout<<"Wynik #"<<i+1<<" = "<<e[i]<<" ";
}
float c()
{
    a();
    short d=10;
    float e[d];
    long double f=0;
    for(int i=0; i<a(); i++)
        f=f+e[i];
    return (f=f/a());
}

 

komentarz 17 maja 2017 przez ScriptyChris Mędrzec (190,190 p.)
edycja 17 maja 2017 przez ScriptyChris

Czy próbowałeś wewnątrz main() zapisać po prostu tak?

int hValue = a();
b(hValue);
c(hValue);

W funkcjach b oraz c musisz też określić jakie argumenty przyjmują, czyli:

void b(int hArgument)
{
  /* kod funkcji */

float c(int hArgument)
{
  /* kod funkcji*/

Nie wiem, czy tam jakichś wskaźników/referencji nie trzeba przekazywać (więc traktuj powyższe trochę jak pseudokod), ale z grubsza tak powinno to się dać zrobić.

[edit]

A te pętle nie działają?

for(int i=0; i<a(); i++)

a() powinieneś otrzymywać zmienną h, która zostaje użyta do warunku zakończenia pętli

komentarz 18 maja 2017 przez WilmaOlcho Obywatel (1,740 p.)

Czy nie lepiej byłoby:
 

for (int i=0,arg=a(); i<arg; i++)

Kolejne wywołanie tej funkcji sprawiłoby że program pozwoliłby na pobranie większej ilości ocen golfowych niż na początku, przy czym poprzedniego wyniku by po prostu "zapomniał".
Więc dlaczego stosować ją przy każdym obrocie pętli, skoro można wykorzystać jako warunek początkowy?

1 odpowiedź

+1 głos
odpowiedź 18 maja 2017 przez CjanciK Bywalec (2,970 p.)
Cześć,

Spróbuj może użyć jednej funkcji jako argument drugiej. Wtedy funkcją, która będzie argumentem innej funkcji możesz posterować w ten sposób żeby zwracała na zewnątrz zmienną która Cię interesuje. Jeżeli się mylę to mnie poprawcie :)

Może tutaj znajdziesz coś co Ci pomoże:

https://forum.pasja-informatyki.pl/178888/funkcja-jako-argument-funkcji

Pozdrawiam.

Podobne pytania

0 głosów
1 odpowiedź 823 wizyt
pytanie zadane 10 sierpnia 2015 w C i C++ przez Patrycjerz Mędrzec (192,320 p.)
0 głosów
3 odpowiedzi 1,727 wizyt
pytanie zadane 14 kwietnia 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)
0 głosów
1 odpowiedź 1,069 wizyt
pytanie zadane 9 kwietnia 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)

93,488 zapytań

142,422 odpowiedzi

322,772 komentarzy

62,906 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

Kursy INF.02 i INF.03
...