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

kalkulator - Funkcje 1 starcie

Ostatnio zmodyfikowano 2011-06-01 13:25
Autor Wiadomość
capajera18
Temat założony przez niniejszego użytkownika
kalkulator - Funkcje 1 starcie
» 2011-05-31 19:44:20
Siemka – mam taki problem,  w pierwszym kodzie poniżej  napisałem dwie funkcje -dla liczby A, i dla liczby B . Dalej w funkcji main() , nastepnie w warunku wielokrotnego wyboru pomiedzy slowami kluczowymi jest petla do/while , w tej petli odczytalem dwie funkcje czyli ---
int podana1 = funkcja1();
 Oraz
int podana2 = funkcja2();
 --- problem mam dokladnie z warunkiem kończącym pętle do/while , otóż kiedy zapisze ją w taki sposób
while( podana1 != 0 || podana2 != 0 );
 to zwróci mi bląd
Typu

\Lekcje C++\KALK-by-C18-funkcje\main.cpp||In function `int main()':|
Lekcje C++\KALK-by-C18-funkcje\main.cpp|99|error: `podana1' undeclared (first use this function)|
Lekcje C++\KALK-by-C18-funkcje\main.cpp|99|error: (Each undeclared identifier is reported only once for each function it appears in.)|
Lekcje C++\KALK-by-C18-funkcje\main.cpp|99|error: `podana2' undeclared (first use this function)|
 

Oto fragment:

C/C++
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;

int funkcja1()
{
    bool sprawdz1;
    int liczba;
   
    cin >> liczba;
    sprawdz1 = cin.good();
    cin.clear();
    cin.sync();
    if( sprawdz1 == false )
    do
    {
        cout << "\n Liczbe A, nie literke: ";
        cin >> liczba;
        sprawdz1 = cin.good();
        cin.clear();
        cin.sync();
    } while( !sprawdz1 );
   
    return liczba;
}

int funkcja2()
{
    bool sprawdz2;
    int liczba2;
   
    cin >> liczba2;
    sprawdz2 = cin.good();
    cin.clear();
    cin.sync();
   
    if( sprawdz2 == false )
    do
    {
        cout << "\n Ponownie B: ";
        cin >> liczba2;
        sprawdz2 = cin.good();
        cin.clear();
        cin.sync();
       
    } while( !sprawdz2 );
   
    return liczba2;
}


int main()
{
    bool sprawdz4;
    int menu;
   
    do
    {
        system( "color F0" );
        cout << "\n\n\n\n\t\t\t *** KALKULATOR by CAPAJERA_18 *** \n\n" << endl;
        cout << "\t\t#------------------------------------------------#" << endl;
        cout << "\t\t|    1 - Dodawanie                               |" << endl;
        cout << "\t\t|    0 - Wyjscie z programu                      |" << endl;
        cout << "\t\t#------------------------------------------------# " << endl;
        cout << "\n\n WYBIERZ OPCJE I NACISNIJ ENTER -> ";
        cin >> menu;
        sprawdz4 = cin.good();
        cin.clear();
        cin.sync();
       
        if( sprawdz4 == false )
        do
        {
            cout << " Podaj opcje, nie litere -> ";
            cin >> menu;
            sprawdz4 = cin.good();
            cin.clear();
            cin.sync();
           
        } while( !sprawdz4 );
       
       
        switch( menu )
        {
        case 1:
            cout << "\n\n -> Jako A i B podaj 0 by zakonczyc dodawanie <- \n\n" << endl;
            do
            {
                int wynik;
                cout << " podaj liczbe A ";
                int podana1 = funkcja1();
               
                cout << "\n podaj liczbe B ";
                int podana2 = funkcja2();
               
                wynik = podana1 + podana2;
               
                cout << podana1 << " + " << podana2 << " = " << wynik << endl;
               
            } while( podana1 != 0 || podana2 != 0 ); // z tym mam problem
           
            cout << " *** EXIT *** " << endl;
            break;
           
           
        case 0:
            cout << " EXIT PROGRAM, GOOD BYE :-) " << endl;
            getch();
            return 0;
            break;
           
            default:
            cout << " \n\n\n\n\n\n\n\n\n\n\n" << endl;
            cout << "\t\t\t Brak opcji " << menu << endl;
            break;
        }
    } while( 1 );
   
    getch();
    return 0;
}

Nom to pół przedstawionego problemu – dalej kiedy zmienię warunek kończący pętle
Na:
while( funkcja1 != 0 || funkcja2 != 0 );
 ^^^ to wtedy po kompilacji i uruchomieniu programu Wybraniu opcji dodawania , wpisując ZERO, nie chce mi się to zakończyć
Lecz kiedy napisze w taki sposób dodatkowo z nawiasami
while( funkcja1() != 0 || funkcja2() != 0 );
 Wtedy czeka dodatkowo na 3 liczby, to wynik programu po dopisaniu ostatniego warunku jaki tu przedstawiłem:

WYBIERZ OPCJE I NACISNIJ ENTER -> 1
->Jako …….. <-
Podaj liczbe A: 2
Podaj liczbe B: 2
2 + 2 = 4
… <<<- i tu Mi czeka na dodatkowy znak
Podaj liczbe A: 5
Podaj liczbe B: 1
5 + 1 = 6
…. << - i znowu

I coż nie mogę sobie z tym poradzić by czytało mi liczbe ZERO , jako opcje wyjścia z dodawania.

Czy mógłby mi ktoś pomóc ??
Wytłumaczyć co to za błąd, poradzić itd ?
Bardzo bardzo prosze ...

P-33703
Mrowqa
» 2011-05-31 20:09:59
Nie wiem o co chodzi :D Piszesz, że działa źle, ale nie piszesz jak ma działać :P
podana1 != 0 || podana2 != 0
Radzę poczytać -> » Kurs C++ » Poziom 1warunki logiczne lekcja
Twój warunek jest spełniony, gdy choć jedna z liczb jest różna od zera :)

Pozdrawiam,
Mrowqa
P-33706
capajera18
Temat założony przez niniejszego użytkownika
» 2011-05-31 20:15:54
To znaczy że
to jest dobry zapis ??

podana1 != 0 || podana2 != 0

Jeżeli jest dobry to dlaczego mi wywala błąd ???

Przecież napisałem , że ma działać w taki sposób by można było wyjść podczas dodawania dzieki wprowadzeniu cyfro zero

Tak sie zastanawiam czy nie jasno pisze ?
Jakby to jeszcze wytłumaczyć, może w punktach to przedstawić ?


Chodzi mi głównie o to, co robie takiego zle że podczas wprowadzenia zera:
1. W pierwszym przypadku
while( podana1 != 0 || podana2 != 0 );
podczas kompilacji wywala mi 3 przedstawione błędy
2. w drugim przypadku
while( funkcja1 != 0 || funkcja2 != 0 );

 nie czyta mi liczby zero by w warunku został zwrócony fałsz ny ?? Pyntla sie zakonczyła ??? <- ktos mnie za to postrzeli
3. w trzecim przypadku
while( funkcja1() != 0 || funkcja2() != 0 );
 czeka dodatkowo na 3 liczby gdzie
 i w tym przypadku po wprowadzeniu trzeciego zera dopiero mi wychodzi z dodawania

-- chce by działało to tak by do liczby A i B wprowadzić zero by wyjsc z dodawania
Ja rozumiem warunki logiczne tylko nie wiem co tu robie zle z tymi funkcjami.
Kurcze -  :-(
P-33707
Mrowqa
» 2011-05-31 20:31:33
Nie mówiąc, że ostatniej edycji dokonałeś po tym jak opublikowałeś posta, to możliwe, że nie doczytałem się tego :P Ciesz się, że mi się kod chciało czytać ... :D

EDIT:
Nazwa funkcji to jej adres więc porównanie jej z zerem - bezsens :D ( nie postrzelę Cię na szczęście ^^ ). Z kolei jeśli dołożysz nawiasy - wtedy wywołujesz funkcje :P
Radzę jak wcześniej - poczytać kursik ( dotyczący funkcji ). Nawet analogii nie ma w tym co napisałeś :P

Pozdrawiam,
Mrowqa
P-33708
capajera18
Temat założony przez niniejszego użytkownika
» 2011-05-31 20:33:20
No człowieku wgl dzieki za poświęcenie :_)
aha to już kumam :-)

no tak to prawda adres i zero tak bezsens :-)

Mam nadzieje że miałeś na myśli kod programu mówiąc NIE MA ANALOGI w tym co napisałem , a nie to jak przedstawiłem kod,

OK dzieki wielkie biore sie do roboty
P-33710
Mrowqa
» 2011-05-31 20:47:26
Jeśli chodzi Ci o analogię to chodziło mi o nazwę funkcji i jej wywołanie :P
P-33711
capajera18
Temat założony przez niniejszego użytkownika
» 2011-05-31 20:55:55
spoko :-) spoko :-)
Popracuje nad tym
P-33712
capajera18
Temat założony przez niniejszego użytkownika
» 2011-06-01 13:25:34
dobra znalazłem problem :-)
Przecież pętla zmiennej nie widziała <- przenośnia
P-33729
« 1 »
  Strona 1 z 1