Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
Poniższy program wypisuje liczby -3, 0 i 145:
// Liczby całkowite //----------------- #include <iostream> using namespace std; int main() { cout << ":" << -3 << endl << ":" << 0 << endl << ":" << 145 << endl; return 0; } |
Zwróć uwagę, iż wydruk nie wygląda ładnie:
:-3 :0 :145 |
Możemy to zmienić przez zastosowanie tzw. manipulatorów, które zmieniają sposób działania strumienia. Aby móc korzystać z manipulatorów, musimy dołączyć do programu ich definicje z pliku iomanip. Wpisz dodatkową dyrektywę #include:
// Liczby całkowite //----------------- #include <iostream> #include <iomanip> using namespace std; int main() { cout << ":" << -3 << endl << ":" << 0 << endl << ":" << 145 << endl; return 0; } |
Teraz mamy dostęp do różnych manipulatorów. Manipulator setw(szerokość pola) tworzy pole o zadanej szerokości, w którym zostanie umieszczona liczba wyświetlana w oknie konsoli. Cyfry tej liczby będą dosunięte do prawej krawędzi tego pola. Manipulator wysyłamy do strumienia przed wysłaniem liczby:
// Liczby całkowite //----------------- #include <iostream> #include <iomanip> using namespace std; int main() { cout << ":" << setw(3) << -3 << endl << ":" << setw(3) << 0 << endl << ":" << setw(3) << 145 << endl; return 0; } |
Teraz wydruk wygląda bardziej schludnie:
: -3 : 0 :145 |
Możemy łączyć wyświetlanie tekstu z wyświetlaniem liczb:
// Liczby całkowite //----------------- #include <iostream> using namespace std; int main() { cout << "2 + 2 = " << 5 << endl; return 0; } |
Poniższy program wyświetla liczby -3.14, 0.1 i 125.275:
// Liczby niecałkowite //-------------------- #include <iostream> using namespace std; int main() { cout << ":" << -3.14 << endl << ":" << 0.1 << endl << ":" << 125.275 << endl; return 0; } |
:-3.14 :0.1 :125.275 |
Znów wynik nie wygląda ładnie. Powodem jest tutaj to, iż liczby te posiadają różną ilość cyfr całkowitych i ułamkowych. Aby to naprawić, musimy ponownie skorzystać z pomocy manipulatorów. Wykorzystamy manipulatory:
fixed ustala stały format liczb.
setprecision(liczba cyfr ułamkowych), który należy wysłać do strumienia
tylko raz, gdyż jego działanie jest trwałe,
// Liczby niecałkowite //------------------- #include <iostream> #include <iomanip> using namespace std; int main() { cout << fixed << setprecision(3); cout << ":" << -3.14 << endl << ":" << 0.1 << endl << ":" << 125.275 << endl; return 0; } |
:-3.140 :0.100 :125.275 |
Teraz wykorzystamy manipulator setw() do określenia szerokości pola liczby i dosunięcia jej do prawej krawędzi tego pola:
// Liczby niecałkowite //------------------- #include <iostream> #include <iomanip> using namespace std; int main() { cout << fixed << setprecision(3) << endl; cout << ":" << setw(7) << -3.14 << endl << ":" << setw(7) << 0.1 << endl << ":" << setw(7) << 125.275 << endl; return 0; } |
: -3.140 : 0.100 :125.275 |
// Obliczenia //----------- #include <iostream> using namespace std; int main() { cout << "-----L1 = " << 12.4 << endl << "-----L2 = " << 3.72 << endl << "L1 + L2 = " << 12.4 + 3.72 << endl << "L1 - L2 = " << 12.4 - 3.72 << endl << "L1 x L2 = " << 12.4 * 3.72 << endl << "L1 : L2 = " << 12.4 / 3.72 << endl; return 0; } |
-----L1 = 12.4 -----L2 = 3.72 L1 + L2 = 16.12 L1 - L2 = 8.68 L1 x L2 = 46.128 L1 : L2 = 3.33333 |
Teksty po lewej stronie wyglądają dobrze, jednak wyniki obliczeń musimy odpowiednio sformatować za pomocą manipulatorów:
// Obliczenia //----------- #include <iostream> #include <iomanip> using namespace std; int main() { cout << fixed << setprecision(4); cout << "-----L1 = " << setw(9) << 12.4 << endl << "-----L2 = " << setw(9) << 3.72 << endl << "L1 + L2 = " << setw(9) << 12.4 + 3.72 << endl << "L1 - L2 = " << setw(9) << 12.4 - 3.72 << endl << "L1 x L2 = " << setw(9) << 12.4 * 3.72 << endl << "L1 : L2 = " << setw(9) << 12.4 / 3.72 << endl; return 0; } |
-----L1 = 12.4000 -----L2 = 3.7200 L1 + L2 = 16.1200 L1 - L2 = 8.6800 L1 x L2 = 46.1280 L1 : L2 = 3.3333 |
Sprawdź wynik takiego programu:
// Obliczenia //----------- #include <iostream> using namespace std; int main() { cout << 3 + 3 * 3 << endl; return 0; } |
Otrzymałeś 12, ponieważ komputer najpierw wykonał mnożenie, a następnie dodawanie:
3 + 3 * 3 → 3 + 9 → 12 |
Gdyby komputer wykonywał te działania w kolejności operatorów w wyrażeniu, to wynik byłby inny:
3 + 3 * 3 → 6 * 3 → 18 |
Jeśli chcemy wymusić określoną kolejność wykonywania działań, to musimy zastosować nawiasy okrągłe ( ). Wyrażenie w nawiasach jest obliczane najpierw.
// Obliczenia //----------- #include <iostream> using namespace std; int main() { cout << (3 + 3) * 3 << endl; return 0; } |
Teraz najpierw komputer wykona dodawanie, a na końcu mnożenie. Wynikiem będzie liczba 18.
Uwaga:
Jeśli przy dzieleniu oba argumenty są liczbami całkowitymi, to wynik dzielenia jest również liczbą całkowitą. Sprawdź wynik takiego programu:
// Obliczenia //----------- #include <iostream> using namespace std; int main() { cout << 5 / 2 << endl; return 0; } |
Jest to tzw. dzielenie całkowite. Jeśli chcesz otrzymać wynik niecałkowity, to musisz zapewnić, że przynajmniej jeden z argumentów jest liczbą niecałkowitą. Otrzymasz ją mnożąc argument przez 1.0:
// Obliczenia //----------- #include <iostream> using namespace std; int main() { cout << 1.0 * 5 / 2 << endl; return 0; } |
lub
// Obliczenia //----------- #include <iostream> using namespace std; int main() { cout << 5 / (1.0 * 2) << endl; return 0; } |
W ostatnim przykładzie nawiasy są konieczne, w przeciwnym razie komputer podzieli 5 przez 1.0 i otrzyma wynik 5, który następnie pomnoży przez 2, co w sumie da wynik końcowy 10, a nie o to nam chodziło!
Jeśli argument jest zwykłą liczbą całkowitą, to zamieniamy go prosto na liczbę niecałkowitą dodając kropkę i zero:
// Obliczenia //----------- #include <iostream> using namespace std; int main() { cout << 5.0 / 2 << endl; return 0; } |
lub
// Obliczenia //----------- #include <iostream> using namespace std; int main() { cout << 5 / 2.0 << endl; return 0; } |
typ_danych nazwa_zmiennej;
typ_danych | – | określa rodzaj przechowywanej w zmiennej informacji: int – zmienna całkowita, przechowuje liczby całkowite double – zmienna niecałkowita, przechowuje liczby ułamkowe. |
nazwa_zmiennej | – | jest napisem, poprzez który uzyskujemy dostęp do informacji przechowywanej w zmiennej. Nazwy zmiennych zbudowane są z liter małych i dużych, cyfr oraz znaku podkreślenia. Pierwszym znakiem nazwy zmiennej powinna być litera (nie może być nim cyfra!) lub znak podkreślenia. Zmienna nie powinna posiadać nazwy dłuższej od 31 znaków (tyle zwykle zapamiętują kompilatory C++). Nie wolno również zmiennym nadawać nazw identycznych ze słowami kluczowymi języka C++ (np. return, int, double, itp.). Nazwa zmiennej powinna kojarzyć się ze spełnianą funkcją w programie: lepiej użyć nazw Wynik, nazwisko, konto od Q12XC5, r74SY8 czy a_7dnm99VCD. |
Przykłady deklaracji zmiennych:
int a; // zmienna a jest zmienną całkowitą int a,b,c,d; // w jednej definicji można umieścić kilka zmiennych double x1,x2,wynik; // zmienne niecałkowite |
Często informacja jest wprowadzana do zmiennych z klawiatury komputera. W ten sposób użytkownik może podać dane, które komputer następnie przetworzy w programie. Odczytu danych z klawiatury dokonujemy w języku C++ przy pomocy strumienia cin (ang. console input – wejście konsoli). Składnia jest następująca:
cin >> nazwa_zmiennej; |
W jednym rozkazie można odczytywać informacje do kilku różnych zmiennych:
cin >> a >> b >> c; // Odczyt kolejno do zmiennej a, b i c |
// Odczyt danych ze strumienia //---------------------------- #include <iostream> using namespace std; int main() { int wiek; cout << "Witaj. Ile masz lat? : "; cin >> wiek; cout << "Teraz masz lat " << wiek << ". Ale za 15 lat będziesz miał już lat " << wiek + 15 << endl << endl; return 0; } |
zmienna = wyrażenie; |
Komputer oblicza wartość wyrażenia i wynik umieszcza w podanej zmiennej. Znaku = nie traktuj jako równość matematyczną, jest to symbol operacji przypisania.
Temperaturę w stopniach Celsjusza przeliczamy na temperaturę w stopniach Fahrenheita wg wzoru:
Poniższy program demonstruje, jak ważna jest kolejność wykonywania działań na liczbach całkowitych. Jeśli do przeliczenia wykorzystamy bezpośrednio powyższy wzór, to otrzymamy wyrażenie:
Wynik będzie błędny, ponieważ dzielenie 9 / 5 jest dzieleniem całkowitym i daje wartość 1. Należy zmienić kolejność działań:
// Program przeliczający stopnie // Celsjusza na stopnie Fahrenheita. //---------------------------------- #include <iostream> using namespace std; int main() { int tc, tf; cout << "Przeliczanie stopni C na stopnie F" << endl << "----------------------------------" << endl << endl << "Temperatura w stopniach C? : "; cin >> tc; tf = 9 * tc / 5 + 32; cout << "Temperatura w stopniach F : " << tf << endl << endl; return 0; } |
Na matematyce rozwiązywaliście równania liniowe postaci:
Wynikiem jest:
// Program obliczający pierwiastek // równania liniowego ax + b = 0 //-------------------------------- #include <iostream> #include <iomanip> using namespace std; int main() { double a, b, x; cout << fixed << setprecision(2); cout << "a = "; cin >> a; cout << "b = "; cin >> b; // Obliczamy niewiadomą x x = - b / a; cout << endl << "x = " << x << endl; return 0; } |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.