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

Problem z funkcją

Object Storage Arubacloud
0 głosów
217 wizyt
pytanie zadane 13 czerwca 2016 w C i C++ przez TheFeniks Gaduła (4,690 p.)

Witam
Mam problem z tym kodem:

#include <iostream>
using namespace std;

double zamiana(double,double);

int main()
{
  double c;

    cout<<"Podaj temperature w celcujszach: ";
    cin>>c;

    cout<<endl;

    zamiana(c);
    cout<<"Celcjusze: "<<c<<" = "<<f<<"farenhajta";

 return 0;
}

double zamiana(double f,double c)
{
    f=1.8*c+32;
    return f;
}

Podczas kompilacji kompilator wyrzuca błędy:

error: too few arguments to function 'double zamiana(double, double)'

error: 'f' was not declared in this scope'

Wiem że kompilator mówi że zmienna 'f' nie jest zdeklarowana no ale nie wiem jak to naprawic. :x
W czym leży błąd co zrobiłem źle ?

Z góry dzięki za pomoc ;)

4 odpowiedzi

+1 głos
odpowiedź 13 czerwca 2016 przez niezalogowany
Zadeklarowałeś funkcje, która otrzymuje 2 argumenty typu double, podczas gdy ty przesyłasz 1.
1
komentarz 13 czerwca 2016 przez TheFeniks Gaduła (4,690 p.)

No tak.. ;x

Zrobiłem tak:

#include <iostream>
using namespace std;

double zamiana(double,double);

int main()
{
  double c,f;

    cout<<"Podaj temperature w celcujszach: ";
    cin>>c;

    cout<<endl;

    zamiana(c,f);
    cout<<"Celcjusze: "<<c<<" = "<<f<<" farenhajta";

 return 0;
}

double zamiana(double c,double f)
{
    f=1.8*c+32;
    return f;
}

Teraz piknie się kompiluje ale wyrzuca jakiś dziwny wynik.
Np.

Podaj temperature w celcujszach: 10
Celcjusze: 10 = 8,89462e+265 farenhajta

Co tu się staneło ? ;P

komentarz 13 czerwca 2016 przez niezalogowany

Notacja naukowa. Przed wypisaniem daj:

std::cout.setf(std::ios::fixed);

Poza tym to:

double zamiana(double c,double f)
{
    f=1.8*c+32;
    return f;
}

można skrócić do:

double zamiana(double c)
{
    return 1.8*c+32;
}

 

komentarz 13 czerwca 2016 przez DragonCoder Nałogowiec (36,500 p.)
Notacja naukowa, mówi o przesunieciu przecinka o ileś miejsc w tym przypadku o 265
komentarz 13 czerwca 2016 przez TheFeniks Gaduła (4,690 p.)

Teraz wyrzuca to:

Podaj temperature w celcujszach: 10
Celcjusze: 10.000000 = 889462264712478112049907796649030166290167191649239588369
58035625835421378018589973327306972321633758444827277904199658254480727141402118
61480766563178854076275193298356151508186792219758643200867939234086698885658793
4045628719390226331286811968471250123331414786048.000000 farenhajta
Process returned 0 (0x0)   execution time : 32.042 s
Press any key to continue.

:x

#include <iostream>
using namespace std;

double zamiana(double,double);

int main()
{
  double c,f;

    cout<<"Podaj temperature w celcujszach: ";
    cin>>c;

    cout<<endl;

    zamiana(c,f);

    std::cout.setf(std::ios::fixed);
    cout<<"Celcjusze: "<<c<<" = "<<f<<" farenhajta";

 return 0;
}

double zamiana(double c,double f)
{
    f=1.8*c+32;
    return f;
}

I bez std:: jest tak samo

komentarz 13 czerwca 2016 przez DragonCoder Nałogowiec (36,500 p.)
Tak może zaokrąglenie liczby do iluś tam miejscach po przecnku, biblioteka cmath.

http://cpp0x.pl/kursy/Kurs-C++/Biblioteka-math-h/322

std raczej musi być bo to standard c, dlatego jest std, bynajmiej tak czytałem
komentarz 13 czerwca 2016 przez niezalogowany
Radzę przerobić jakiś porządny kurs, w którym dobrze omówiono funkcje bo ich nie rozumiesz. Wpisujesz zmienną f, która jest niezainicjalizowana i ma w sobie śmieci z pamięci. Twoja funkcja zwraca double więc to co zwraca przypisz do zmiennej f i wtedy ją wypisuj(ewentualnie zmienną f przekazuj przez referencje, typ funkcji zmień na void i usuń return).
+1 głos
odpowiedź 13 czerwca 2016 przez Radfler VIP (101,030 p.)
  • W funkcji main brakuje definicji zmiennej f. Powinno być raczej tak:
    double f = zamiana(c);
  • Funkcja zamiana powinna wyglądać wg mnie tak (wystarczy tylko jeden argument):
    double zamiana(double c);

    Przyjmuje ona stopnie Celsjusza, które zmienia na stopnie Fahrenheita.

  • Parametr f, który był wcześniej parametrem funkcji zamiana przenieś do funkcji:

    double f=1.8*c+32;
    return f;
0 głosów
odpowiedź 13 czerwca 2016 przez DragonCoder Nałogowiec (36,500 p.)
edycja 13 czerwca 2016 przez DragonCoder

Zadekleruj "f"

A więc yrobiłęm tak i się kompiluje, czytaj error, bo nie był tylko jeden error.

#include <iostream>
using namespace std;
 
double zamiana();
 
int main()
{
  double c,f;
 
    cout<<"Podaj temperature w celcujszach: ";
    cin>>c;
 
    cout<<endl;
 
    zamiana();
    cout<<"Celcjusze: "<<c<<" = "<<f<<"farenhajta";
 
 return 0;
}
 
double zamiana()
{
	double f, c;
    f=1.8*c+32;
    return f;
}

 

0 głosów
odpowiedź 13 czerwca 2016 przez ignacjusz Bywalec (2,390 p.)

Witam, czytając komentarze zauważyłem, że jest problem z wyświetleniem odpowiedniej liczby liczb po przecinku. Robią to takie instrukcje:

#include <iomanip> //Załaczamy odpowiedną bibliotekę
cout<<fixed; //Zmiana wyświetlenia bez wartości wykładniczej
cout<<setprecision(2); //Ustawiamy liczbę wyświetlanych liczb po przecinku (np. 2)

Cieszę się jeśli pomogłem smiley

 

Podobne pytania

0 głosów
3 odpowiedzi 1,945 wizyt
0 głosów
2 odpowiedzi 454 wizyt
0 głosów
2 odpowiedzi 1,299 wizyt
pytanie zadane 8 lutego 2018 w C i C++ przez Leon307 Początkujący (270 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 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!

...