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

Lekcja 1.12

Ostatnio zmodyfikowano 2016-07-12 08:26
Autor Wiadomość
CCbolt
Temat założony przez niniejszego użytkownika
Lekcja 1.12
» 2016-07-11 07:29:14
Zadanie w PD zrobiłem, zrozumiałem w skrócie (2w1) wygląda to tak jak w pierwszym kodzie, w drugim chciałem trochę poszaleć no i wykorzystałem kod z wcześniejszych lekcji ale nie umiem albo źle wczytuje dane, jakaś podpowiedź jak problem rozwiązać czy to będzie dopiero w kolejnych lekcjach?

Kod 1
C/C++
#include <iostream>

using namespace std;
int main()
{
    bool wynik;
    int liczba;
   
    liczba = 1;
    wynik = liczba <= 1 || liczba <= 1;
    cout << "wynik = " << wynik << endl << endl;
   
    wynik = liczba <= 1 || liczba <= 2 && liczba > 7;
    cout << "wynik = " << wynik << endl;
   
    wynik = liczba <= 1 || liczba <= 2 && liczba > 7;
    cout << "wynik = " << wynik << endl;
   
    wynik =( liczba <= 1 || liczba <= 2 ) && liczba > 7;
    cout << "wynik = " << wynik << endl;
   
    wynik = liczba <= 1 ||( liczba <= 2 && liczba > 7 );
    cout << "wynik = " << wynik << endl;
   
    return 0;
}



Kod 2 ( końcowe linie )

C/C++
#include <iostream>

using namespace std;

int main()
{
    int a, b, c;
    float x1, x2, x3;
    float A1, A2, A3; // zmienne pomocnicze, wyniki
   
    x1 = x2 = x3 = 15;
   
    cout << "Podaj A: ";
    cin >> a;
    cout << "Podaj B: ";
    cin >> b;
    cout << "Podaj C: ";
    cin >> c;
   
    A1 =( a + b ) - x2; //wyniki
    A2 =( c - a ) * x1;
    A3 =( b * c ) / x3;
   
    cout << "A1: (a+b)-x2= " << A1 << endl;
    cout << "A2: (c-b)*x1= " << A2 << endl;
    cout << "A3: (b*c)/x3= " << A3 << endl;
   
    bool x = A1 <= A2;
    cout << "A1 <= A2: " << x << endl;
   
    bool y = A3 == A2;
    cout << "A3 == A2: " << y << endl;
   
    bool z =( A2 - A3 ) <( A3 + A3 );
    cout << "(A2-A3)<(A3+A3): " << z << endl; //bool wynik;
    //int liczba;
   
    {
        bool wynik = A1, A2, A3;
        int liczna = a, b, c;
       
        wynik = a >= A2 || b < A2;
        cout << "a >= A2 || b < A2 = " << wynik << endl;
        wynik = a >= A2 || !( b < A2 );
        cout << "a >= A2 || !(b < A2) = " << wynik << endl;
        wynik = c < A2 && c > A2;
        cout << " 1/0 = " << wynik << endl;
       
    }
    return 0;
}
[ cpp ]
P-149828
BlackFive
» 2016-07-11 09:57:08
Trochę się rozpisałem mam nadzieję że jasno :) czytaj komentarze a wszystko powinno się rozjaśnić :)

C/C++
/* //Dla testów sobie odkomentuj i sprawdź co wyszło :) ale raczej już tego nie odpalisz :P
{

        bool wynik = A1, A2, A3;
        int liczna = a, b, c;
       
        cout << endl << endl << "TESTY TESTY TESTY TESTY TESTY TESTY ";
        cout << "A1: " << A1 << " A2: " << A2 << " A3: " << A3 << " a: " << a << " b: " << b << " c: " << c << " liczna: " << liczna << " wynik: " << wynik << endl; // W tym miejscu sprawdza sobie co przyjmują poszeczególne zmienne
cout << endl << endl;
       
        wynik = a >= A2 || b < A2;
        cout << "a >= A2 || b < A2 = " << wynik << endl;
        wynik = a >= A2 || !( b < A2 );
        cout << "a >= A2 || !(b < A2) = " << wynik << endl;
        wynik = c < A2 && c > A2;
        cout << " 1/0 = " << wynik << endl;
       
    }
*/

/*
Zauważ że nową część kodu zawarłeś w nawiasach klamrowych które wyznaczają początek/koniec funkcji/pętli/procedury itp. jest to informacja dla kompilatora,
przez to przy zdefiniowaniu nowych zmiennych o tych samych nazwach kompilator nie sypnął błędami... niestety nie jestem na tyle zaawansowany żeby zrozumieć dlaczego tak się dzieje
i chętnie bym się dowiedział od bardziej doświadczonych programistów.

Najprościej jest sprawdzić co przechowują Ci zmienne w tym przypadku,
zauważ jak definiujesz zmienne zdefiniowałeś zmienną typu boolean która przyjmuje wartość A1,
jako że jest to zmienna typu bool to jeżeli wartość jest różna od 0 przyjmuje to jako 1
czyli wychodzi to tak:
do wyniku przypisujesz wartość A1
A2 jest nową zmienną typu boolean nie jest przypisana wartość więc jest 0
A3 to samo co A2
kolejne zmienne typu integer liczna = a
b nie jest przypisana wartość więc wartością jaką przechowuje jest jakiś śmieć z pamięci
c to samo co b

zmiennej liczna nie wykorzystujesz więc nie wiem po co jest tworzona.
*/

bool wynik;
//int liczna = a, b, c;
wynik = a >= A2 || b < A2;
cout << "a >= A2 || b < A2 = " << wynik << endl;
wynik = a >= A2 || !( b < A2 );
cout << "a >= A2 || !(b < A2) = " << wynik << endl;
wynik = c < A2 && c > A2; // ta operacja zawsze będzie 0 ponieważ liczba c nie może być jednocześnie mniejsza i większa od A2 przy operacji or || jak najbardziej ta linia będzie poprawna
//wynik = c != A2;  // operacja logiczna sprawdzająca czy c jest różne od A2
//wynik = c != 0; // operacja logiczna sprawdzająca czy c jest różne od 0
//wynik = A2 != 0; // operacja logiczna sprawdzająca czy A2 jest różne od 0
cout << " 1/0 = " << wynik << endl;

return 0;
}
P-149829
carlosmay
» 2016-07-11 14:51:34
C/C++
/*
Zauważ że nową część kodu zawarłeś w nawiasach klamrowych które wyznaczają początek/koniec funkcji/pętli/procedury itp. jest to informacja dla kompilatora,
przez to przy zdefiniowaniu nowych zmiennych o tych samych nazwach kompilator nie sypnął błędami... niestety nie jestem na tyle zaawansowany żeby zrozumieć dlaczego tak się dzieje*/
Nie sypie błędami, bo to nie jest błąd.
Wydzielenie bloku instrukcji, wewnątrz innego bloku i zdefiniowanie zmiennych o tych samych identyfikatorach powoduje całkowite zakrycie zmiennych zewnętrznych,
poza zmiennymi globalnymi, do których jest dostęp operatorem
::
.

Trochę na temat zasięgu zmiennych.
http://en.cppreference.com/w​/cpp/language/scope
P-149836
BlackFive
» 2016-07-11 14:59:04
dziękuję za link ale już znalazłem ten temat gdyż mnie zainteresował jak to się dzieje że to działa :) nigdy nie widziałem takiego przypadku a zawsze warto się nauczyć nowych rzeczy :)
P-149837
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-07-11 17:52:06
Za 2h usiądę przy tym i to przetrawię, dzięki za informacje.
@BlackFive dzięki twoje komentarze bardzo mi pomogły. Teraz mi się nasuwa pytanie, jak zrobić aby komplikator nie wczytywał nowych zmiennych tylko zmienne wprowadzone na początku (Cyfry A, B, C oraz wyniki A1, A2, A3 ). Twój test wczytał poprawnie a oraz wynik A1 natomiast później mam randomowe cyfry.
P-149848
BlackFive
» 2016-07-12 08:26:47
wklej:
C/C++
bool wynik;
//int liczna = a, b, c;
wynik = a >= A2 || b < A2;
cout << "a >= A2 || b < A2 = " << wynik << endl;
wynik = a >= A2 || !( b < A2 );
cout << "a >= A2 || !(b < A2) = " << wynik << endl;
wynik = c < A2 && c > A2; // ta operacja zawsze będzie 0 ponieważ liczba c nie może być jednocześnie mniejsza i większa od A2 przy operacji or || jak najbardziej ta linia będzie poprawna
//wynik = c != A2;  // operacja logiczna sprawdzająca czy c jest różne od A2
//wynik = c != 0; // operacja logiczna sprawdzająca czy c jest różne od 0
//wynik = A2 != 0; // operacja logiczna sprawdzająca czy A2 jest różne od 0
cout << " 1/0 = " << wynik << endl;

zamiast:
C/C++
{
    bool wynik = A1, A2, A3;
    int liczna = a, b, c;
   
    wynik = a >= A2 || b < A2;
    cout << "a >= A2 || b < A2 = " << wynik << endl;
    wynik = a >= A2 || !( b < A2 );
    cout << "a >= A2 || !(b < A2) = " << wynik << endl;
    wynik = c < A2 && c > A2;
    cout << " 1/0 = " << wynik << endl;
   
}

Pamiętaj o tych klamrach żeby je też usunąć {}. bo one Ci paskudzą w kodzie... tworzysz tzw. scope
P-149854
« 1 »
  Strona 1 z 1