26 marca 2011

"Naprawdę masz oryginalnego Windowsa?!" czyli o mentalności Polaków słów kilka.

"Naprawdę masz oryginalnego Windowsa?!" czyli o mentalności Polaków słów kilka.

Autorem artykułu jest Łukasz Stolarski



Po wielkim przełomie w 1989 roku do Polski zaczęło przybywać coraz więcej komputerów. Malutki, ale coraz większy odsetek ludzi mógł się pochwalić swoim Commodore 64, czy później Amigą. Czym się ten okres różni od dzisiejszego? Pod względem "nabywania" oprogramowania praktycznie niczym... Zapraszam do dalszej lektury.

Pamiętam czasy gdy w pawilonach handlowych stały stoiska z kasetami magnetofonowymi do kupienia za 150 000 starych złotych (15.00PLN) z zawartością blisko 40 scrackowanych gier (!). Stoiska te były na dobrą sprawę legalne, nikomu nie przyszło do głowy żeby sprawdzać, czy towar pochodzi od producenta czy z piwnicy crackerów ;). Dziś wspominając tamte czasy można pokusić się o stwierdzenie, że łatwiej było nabyć "piraty" niż oryginalne kopie.

Przenieśmy się dekadę dalej. PC-ty stają się powszechnością, Windows 98 z hukiem wchodzi na rynek. Monopol Microsoftu daje się we znaki, co odbija się na cenach legalnych Okienek. Nie każdy jest w stanie dać kilkaset złotych, a i Ci, których na to stać wychodzą z założenia, że po co tyle płacić skoro czysta płyta w sklepie kosztuje 2zł. Warto zwrócić uwagę na fakt, że 12 lat temu zarobki przeciętnego Polaka były dużo mniejsze od obecnych. Ceny gier również nie rozpieszczały. Standardem była cena okolo 159zł - 199zł za nowo wydany produkt. W czasach gdy nagrywarkę CD można było nabyć w cenie nie mniejszej niż 2000zł najbardziej na osiedlach bogacili się Ci, którzy w nią zainwestowali. Z biegiem lat wszyscy przyzwyczaili się do takiego stanu rzeczy. Gdy ceny nagrywarek spadały, każdy już na własną rękę mógł sobie "radzić" z wysokimi cenami oprogramowania.

Kolejna dekada dalej - mamy rok 2010. Co się zmieniło? Przede wszystkim skala dostępu do Internetu zwiększyła się wielokrotnie i teraz przeważająca większość ludzi ma dostęp do Sieci. Jak łatwo się domyśleć, dla "fanów gier i oszczędności zarazem" jest to istny raj. Nie trzeba nawet wydawać na czystą płytę... Jednak z drugiej strony trzeba zwrócić uwagę na fakt, iż ceny gier i oprogramowania spadły dwu-trzykrotnie. Coraz częściej nowość na rynku kosztuje już ok. 69zł, a nowy Windows 350zł. Legalne upgrade z XP lub Visty do najnowszego systemu możemy kupić za ok. 200zł. Do tego można zauważyć stosunkowo większe wypłaty w porównaniu do dekady wcześniej. Możemy dodać także możliwość darmowego pobrania produktów Microsoftu dla studentów wielu uczelni w Polsce. Teoretycznie więc tłumaczenie, że jest "za drogo" powoli przestaje mieć rację bytu. Nie u nas. Jako jedni z niewielu mamy ogromne predyspozycje do narzekania i zastępowania jednego powodu innymi. Chociaż by być do końca obiektywnych można zauważyć, że z biegiem czasu coraz więcej osób wyciąga portfele w Empikach, ściskając w ręku pudełko z grą.

A może po prostu wystarczyło by sobie wyobrazić sytuację, w której ja - Kowalski napisałem świetną autobiografię nad którą spędziłem dwa lata. Jednak dzień przed premierą ktoś ją wykradł z wydawnictwa i sprzedałem zamiast 10 000 sztuk, zaledwie 2 000, gdyż pozostałą ilość można za darmo ściągnąć z torrentów...

---

Łukasz Stolarski - współwłaściciel firmy WebAwans - projektowanie stron sosnowiec


Artykuł pochodzi z serwisu www.Artelis.pl

Oprogramowanie na zamówienie a jego wycena

Oprogramowanie na zamówienie a jego wycena

Autorem artykułu jest Andrzej Botyk



Realizacja systemów dedykowanych pociąga za sobą konieczność ustalenia sposobu rozliczenia wykonawcą z klientem. Kwestie finansowe zawsze rodzą za sobą nieufność obojga stron, dlatego powinny być potraktowane z duża dozą rozwagi.

Wydaje się, że najbardziej popularnym sposobem rozliczania jest wycenienie przez wykonawcę kosztu wykonania systemu na podstawie specyfikacji. Niestety klient często nie jest w stanie dostarczyć dokładnej specyfikacji, a jedynie przybliżony opis oprogramowania dedykowanego, które potrzebuje, i na jego podstawie oczekuje podania prezycyjnej wyceny. Wykonawca tworzący oprogramowanie na zamowienie może pomóc w przygotowaniu specyfikacji, ale to pociąga za sobą dodatkowe koszty, oraz rodzi konieczność wyceny wykonania specyfikacji. Bez dobrej specyfikacji pomiędzy wykonawcą a klientem mogą pojawić się spory dotyczące sposobu wykonania danej funkcjonalności programu. Sposób ten, pomimo wad, jest obecnie wciąż jednak najbardziej popularny. Cechuje się dużą skutecznością, zwłaszcza gdy dopiero nawiązujemy współpracę z nowym wykonawcą (czy z drugiej strony - z nowym klientem) tworzącym systemy dedykowane.


Drugim sposobem jest stała stawka godzinowa. Firmy oferują różne stawki godzinowe, można spotkać kwoty od 50 do nawet 200 zł netto za godzinę. Oczywiście można znaleźć i niższe i wyższe stawki, są to jednak skrajności. Wykonawca i klient podpisują jedynie ramową umowę. Wykonawca wykonuje prace i na koniec miesiąca podlicza przepracowane godziny, mnożąc je przez stawkę godzinową. Tak otrzymają sumę otrzymuje klient do zapłaty. Ten sposób rozliczeń wymaga wzajemnego zaufania obydwu stron, ale jest bardzo dobry gdy zakres prac do wykonania nad oprogramowaniem dedykowanym często się zmienia, bądź rozszerza. Aby był zastosowany wymaga jednak spełnienia kilku kryteriów, m.in.:
- określenia jasno, co się rozumie przez pojęcie godziny roboczej (godzina wliczająca przerwy wymagane prawem, przerwy obiadowe, czy też jedynie godziny faktycznej pracy? godziny pracy danej osoby, czy też godziny pracy całego zespołu?),
- jasne okreslenie stawki godzinowej i ew. jej wariantów (np. stawka za godzinę, stawka za godzinę pracy w weekendy, w wieczory itd.),
- określenia możliwości sprawdzania poprawności naliczania stawki przez klienta (jak klient może sprawdzać wykonawcę),
- możliwość obserwowania postępów pracy przez klienta,
- możliwość obserwowania historii pracy przez klienta (nad czym pracował pracownik w danym dniu, i ile godzin pracy nad tym spędził).
Przy odpowiednim stopniu zaufania taki sposób rozliczania może być znacznie korzystniejszy niż konkretna kwotowa wycena zlecenia, zarówno dla jednej jak i drugiej strony.

---

Artykuł pochodzi z serwisu www.Artelis.pl

Konta użytkowników w Windows 7

Konta użytkowników w Windows 7

Autorem artykułu jest Maciej Lewandowski



Konta użytkowników w Windows 7 można ustawiać podobnie jak we wcześniejszych systemach firmy Microsoft. Konta użytkowników umożliwiają ochronę komputera przed osobami trzecimi. Przydaje się również w przypadku kiedy z jednego komputera korzysta więcej niż jedna osoba.

W tym artykule przedstawię podstawowe informacje na temat kont użytkowników w Windows 7.

Konta użytkowników w Windows 7

Zarządzanie kontami użytkowników w systemie Windows 7 jest bardzo intuicyjne. Umożliwia tworzenie kont dla administratorów systemu oraz kont dla użytkowników, którzy nie potrzebują do pracy uprawnień administracyjnych. Ekran główny kont użytkowników znajduje się w panelu sterowania -> konta użytkowników.

konta użytkowników w windows 7

Na powyższym zrzucie ekranu przełączyłem widok na małe ikony. Element konta użytkowników w Windows 7 jest zaznaczony wypełnieniem w lewej kolumnie.

Kiedy wybraliśmy już element konta użytkowników w panelu sterowania ukaże się kolejne okno przedstawiające Twój profil. We własnym profilu możesz wykonać takie czynności jak:

-Zmiana hasła

- Usunięcie hasła

-Zmiana obrazu wyświetlanego podczas logowania

-Zmiana nazwy własnego konta

-Zmianę typu własnego konta

konta użytkowników w windows 7

Powyższy zrzut przedstawia konta użytkowników w Windows 7 oraz możliwości jakie są dostępne z tego poziomu.


W głównym oknie własnego profilu w lewej kolumnie znajdują się także inne opcje przeznaczone dla osób bardziej zaawansowanych w administrowaniu kontami użytkowników. Lewa kolumna zawiera takie funkcje jak:

- Powrót do strony głównej panelu sterowania
- Zarządzanie poświadczeniami – jest to magazyn, który zawiera wszystkie loginy i hasła użytkowników korzystających z komputera
- Utworzenie dysku resetowania hasła – przydatna funkcja w przypadku kiedy zapomnimy hasła do własnego konta.
- Połączenie identyfikatorów w trybie online – funkcja ułatwia udostępnianie zasobów dyskowych w sieci oraz nawiązywanie połączeń z innymi komputerami
- Skonfigurowanie zaawansowanych właściwości profilu użytkownika – jak sama nazwa wskazuje w tym miejscu można ustawić zaawansowane właściwości dla wybranego profilu
- Zmiana zmiennych środowiskowych – w tym miejscu zmieniamy różnego rodzaju ścieżki dostępu do kluczowych plików w naszym systemie. Jeśli nie orientujesz się w tym temacie lepiej nic tam nie zmieniaj

Konta użytkowników w Windows 7 można podzielić na dwa typy:

- Administrator
- Użytkownik standardowy

Administrator ma dostęp do wszystkiego, co znajduje się na komputerze. W przypadku kiedy pliki innego użytkownika są chronione hasłem administrator musi je podać a otrzyma dostęp. Poza tym administrator może tworzyć nowe konta użytkowników w Windows 7 nadając im hasła oraz loginy.

konta użytkowników w windows 7

Powyższy zrzut przedstawia uprawnienia jakie posiada administrator w zarządzaniu kontami użytkowników w Windows 7.


W przypadku kiedy nie mamy uprawnień administratora w zarządzaniu kontami użytkowników w Windows 7 nie możemy tworzyć nowych kont. Do dyspozycji mamy tylko własny profil, w którym można zmienić hasło lub nazwę konta.

konta użytkowników w windows 7

Powyższy zrzut ekranu przedstawia okno w którym można utworzyć nowe konta użytkowników w Windows 7.

W przypadku kiedy chcemy utworzyć nowe konta użytkowników w Windows 7 z poziomu użytkownika standardowego system poprosi o hasło administratora.

Zastrzeżony jest również dostęp do katalogów innych użytkowników. Katalogi innych użytkowników systemu Windows 7 znajdują się w komputer -> dysk gdzie zainstalowany jest system Windows 7 (przeważnie C:) -> użytkownicy.

Konta użytkowników w Windows 7 – podsumowanie

Obsługa kont użytkowników w Windows 7 nie powinna sprawić problemów początkującym użytkownikom. Cały interfejs zawarty w panelu sterowania jest bardzo czytelny i łatwy w obsłudze.

---

źródło: http://www.komputerpc.pl/artykuly/index.php?key=rozwin&id_artykulu=50


Artykuł pochodzi z serwisu www.Artelis.pl

Instalacja Windows XP z pendriva

Instalacja Windows XP z pendriva

Autorem artykułu jest Maciej Lewandowski



Z chwilą pojawienia się w ofercie producentów netbooków, które w przeważającej części nie są wyposażone w napęd optyczny instalacja Windows xp z pendriva jest koniecznością.

W celu instalacji Windows xp z pendriva będzie potrzebne kilka rzeczy:
• Płyta z systemem Windows xp
• Pendriva 1GB lub większy
• Drugi komputer z napędem optycznym lub system może być nagrany na twardym dysku naszego komputera
• Program do stworzenia bootowalnego pendriva (link do niego pod artykułem)
• Odrobina cierpliwości

Tworzenie bootowalnego pendriva

Cały proces instalacji Windows xp z pendriva zaczyna się od stworzenia bootowalnego pendriva. Takie narzędzie można uzyskać używając programu z pod tego linka. Ściągamy program. Rozpakowujemy i uruchamiamy. Program uruchomi się w wierszu poleceń w takiej formie jak poniżej:

instalacja windows xp z pendriva


Po zapoznaniu się z komunikatami klikamy dowolny klawisz. Instalacja Windows xp z pendriva będzie możliwa dopiero po zakończeniu procesu tworzenia bootowalnego pendriva dlatego cały ten proces trzeba wykonać poprawnie.

instalacja windows xp z pendriva

Kolejnym krokiem jest formatowanie naszego pendriva. Dla pamięci o równych i większych niż 4GB wybieramy literkę H. Dla mniej niż 4GB wybieramy literkę P. Pojawi się kolejne okno.

instalacja windows xp z pendriva

W powyższym oknie wybieramy naszego pendriva oraz system plików w jakim ma być sformatowany. Wpisujemy również nazwę dla pendriva u mnie jest to PEN. Po przejściu procesu formatowania pendriva zamykamy okno. W wierszu poleceń ukaże się kolejne okno, które wygląda tak:

instalacja windows xp z pendriva

Wkładamy płytę do napędu optycznego i wciskamy cyfrę 1. Wybieramy napęd gdzie znajduje się płyta z instalacją windowsa xp i klikamy ok.

instalacja windows xp z pendriva

Po kliknięciu ok nie rozpocznie się instalacja Windows xp z pendriva lecz zostanie wybrane źródło. Na wszystkie komunikaty klikamy tak lub ok. Kiedy przejdziemy już ten krok wracamy do wiersza poleceń i klikamy cyfrę 2 i wybieramy pendriva z listy. Następnym krokiem jest wpisanie cyfry 3 w wierszu poleceń. W tym miejscu rozpocznie się kopiowanie plików na pendriva.

instalacja windows xp z pendriva

Kopiowanie plików trwa dobrą chwilę. Po skopiowaniu plików klikamy dowolny klawisz i mamy gotowy system. Instalacja Windows xp z pendriva jest już możliwa.

Restartujemy komputer i postępuje w taki sam sposób jakbyśmy instalowali Windows xp z płyty.

---

http://www.komputerpc.pl/porady/index.php?key=rozwin&id=16


Artykuł pochodzi z serwisu www.Artelis.pl

Praktyczny kurs C++ za darmo - Pierwszy program

Praktyczny kurs C++ za darmo - Pierwszy program

Autorem artykułu jest Frycz Modrzewski



Wyjaśnię, w jaki sposób napisać swój pierwszy program w języku C++. Zaczniemy od bardzo prostej i znanej na całym świecie apliakcji "Hello World!", która wypisuje na ekran monitora powitanie hello world. Na samym początku napiszę kilka dziwnych linijek kodu, wbrew pozorom, bardzo ważnych linijek, bez których ani rusz.

Oto one:

#include
#include
using namespace std;

int main()
{

return 0;
}

Od teraz, gdy będziesz pisać nowy program, możesz skopiować ten kod i wkleić do zakładki zatytułowanej np.: „BezNazwy1”. Myślę, że znacznie przyśpieszy to tworzenie pierwszych aplikacji. W kolejnych częściach kursu będę podawał kod, który należy wstawić w tym miejscu:

#include
#include
using namespace std;

int main()
{

//Tutaj wpisuj kod programu

return 0;
}
Program Hello, World! – czyli nasz pierwszy program.
Spróbujemy wypisać na ekran napis „Hello, World!” i zakończyć działanie programu dowolnym klawiszem.

Do wypisywania dowolnego tekstu na ekran konsoli służy polecenie:

cout<<”dowolny tekst”;

Warto zapamiętać tą konstrukcje: Zwróć uwagę na kierunek strzałek << i średnik ; na końcu. Tekst musi być umieszczony w cudzysłowie „”. Zamiast „dowony tekst” wpisujemy „Hello, World!” i mamy nasz pierwszy program, który wygląda tak:

#include
#include
using namespace std;

int main()
{

cout<<"Hello, World!";

return 0;
}

WAŻNE, UWAGA, ZAPAMIĘTAJ!!!: Od teraz nie będę pisał całych programów, lecz tylko kod, który należy wstawić w miejsce //Tutaj wpisuj kod programu

Dla przykładu kod:

cout<<"Hello, World!";

oznacza:

#include
#include
using namespace std;

int main()
{

cout<<"Hello, World!";

return 0;
}


A teraz zasada, o której należy pamiętać zawsze i wszędzie!

Po każdej komendzie, wydanej programowi należy postawić średnik ;. Oznacza on koniec polecenia. Ten nieszczęsny średnik, a raczej jego brak będzie przyczyną awarii wielu Twoich programów, więc pamiętaj o nim. Żeby nie było, że nie ostrzegałem ;-)

Ale jak uruchomić ten program? W zakładce URUCHOM wybieramy KOMPILUJ I URUCHOM. Jeśli wcześniej plik nie był zapisany, pojawi się okno do wyboru miejsca zapisu, następnie program zostanie skompilowany. Potrwa to kilkanaście sekund. Po udanej kompilacji zostanie on uruchomiony. Ale dlaczego nic nie było widać? Bo kazaliśmy naszemu programowi napisać „Hello, World!” i to wszystko. Program napisał (zrobił to bardzo szybko) i wyłączył się. Jeżeli chcemy zobaczyć rezultat naszej pracy należy pod linijką

cout<<"Hello, World!";

wkleić

getch();

Jest to wywołanie funkcji (o wywołaniu funkcji jeszcze sobie opowiemy), która oczekuje na podanie z klawiatury dowolnego znaku. Później wykonywane są dalsze polecenia. Dzięki temu zabiegowi, nasz napis będzie widoczny aż do naciśnięcia jakiegokolwiek przycisku na klawiaturze. Całość wygląda tak:

cout<<"Hello, World!";
getch();

Przypominam, że ten kod trzeba wstawić w odpowiednie miejsce, czyli do tych dziwnych linijek kodu, o których wspominałem na początku ;-) Próbujemy: URUCHOM – KOMPILUJ I URUCHOM. Czekamy…i…jest :-D

Oto Twój pierwszy program. Możesz być z siebie dumny.

Sprawdź, co się stanie, jeżeli napiszesz:

cout<<"Hello, World!";
cout<<"Hura, napisałem swój pierwszy program!";
getch();

Dwie rzeczy, w dodatku niezbyt przyjemne, rzucają się w oczy: Zamiast polskich znaków pokazują się krzaczki. Napisy nie są od siebie oddzielone i są w jednej linii, pomimo tego że w kodzie są w osobnych.

Można rozwiązać problem krzaczków poprzez zmianę strony kodowej, jednakże tym również nie należy sobie psuć głowy. Po prostu unikaj pisania polskich znaków, wyrazy i tak będą czytelne. Jeżeli chodzi o drugą część problemu to mam bardziej optymistyczne wieści. Chcąc uzyskać odstęp pomiędzy dwoma wyrazami, wystarczy wstawić znak spacji na końcu pierwszego lub początku drugiego:

cout<<"Hello, World! "; //spacja na koncu
cout<<"Hura, napisalem swoj pierwszy program!";
getch();

lub

cout<<"Hello, World!";
cout<<" Hura, napisałem swój pierwszy program!"; //spacja na początku
getch();

Aby tekst był wyświetlany do dwóch linijkach, na końcu pierwszego polecenia należy dopisać: <
Całość wygląda tak:

cout<<"Hello, World!"<cout<<"Hura, napisalem swoj pierwszy program!";
getch();
Co oznaczają znaki // ?

Za tymi znakami możemy dopisać komentarz do naszego kodu. Komentarz jest ignorowany przez kompilator. Dzięki temu, otwierając kod źródłowy w przyszłości, będziemy wiedzieć co mieliśmy na myśli pisząc daną linijkę lub blok kodu. Przykładowo:

cout<<"Hello, World!"<
Polecenie cout<<"Hello, World!"<
Będę często używał komentarzy, aby wyjaśnić, co program robi w danym miejscu. Komentarze pomagają nie tylko Tobie, ale również osobom, którym zostanie udostępniony kod źródłowy Twojego programu, dlatego ich pisanie to bardzo, bardzo dobry nawyk, pomimo że nie wnoszą nic do jego działania.

Za znakami // komentarz musi zmieścić się w jednej linii. Kod:

cout<<"Hello, World!"<to jest moj pierwszy program

nie jest poprawny. Drugą linię również należy poprzedzić znakiem //

cout<<"Hello, World!"<//to jest moj pierwszy program

Gdy chcemy napisać długi komentarz, w którym zawieramy informacje np.: o prawach autorskich, możemy go objąć znakami: /* komentarz */

/* bardzo,
bardzo długi,
zawierający kilka linijek,
komentarz */

Przetestuj działanie powyższego kodu, przepisując go do kompilatora:

cout<<"Hello, World!"<bardzo długi,
zawierający kilka linijek,
komentarz */
getch();

Prawda, że nic się nie zmienia? ;-) To wszystko, jeżeli chodzi o komentarze.

Hmm…a co zrobić, żeby wypisane wyrazy nie były tylko w osobnych linijkach, ale aby była między nimi dodatkowa linijka odstępu? Wystarczy dopisać jeszcze raz wyrażenie <
cout<<"Hello, World!"<cout<<"Hura, napisalem swoj pierwszy program!";
getch();

Efekt:

Hello, World!

Hura, napisalem swoj pierwszy program!

Możemy wpisać <
cout<<"Hello, World!"<getch();

Tak. Za pomocą << możemy łączyć wyrazy wypisywane na ekranie. (poprzedzone wyrażeniem cout) Nasze połączenie zawiera: "Hello, World!", endl, endl i "Hura, napisalem swoj pierwszy program!".

Zalety: Kod zajmuje mniej linii oraz jest krótszy, gdyż nie ma konieczności pisania średnika ; na końcu pierwszej linii oraz wyrażenia cout na początku drugiej.

Wady: Kod jest mniej czytelny, trudniej go przeanalizować i wywnioskować co będzie jego efektem. Czytelność kodu to bardzo ważna kwestia o której powiemy w lekcji 3.
A teraz to co lubimy najbardziej – praktyka!

Napisz program (rozwiązanie), który wyświetli następujące informacje o Tobie w podanej formie:

Witaj
Oto moj pierwszy program:

WIZYTOWKA v1.0

Autor: Twoje imię i nazwisko
Adres: miejscowość i nr domu
Telefon: telefon kontaktowy
Poczta: adres e-mail
Data: dzisiejsza data

Copyright © aktualny rok Twoje imię i nazwisko | All rights reserved

Program kończy swoje działanie po wybraniu dowolnego klawisza z klawiatury.

Zapisz go pod nazwą Wizytókwa v1.0, lub pod jakąkolwiek inną, ułatwiającą Ci zapamiętanie działania programu.

Rada: Wszystkie napisane programy zapisuj w oddzielnym folderze, gdyż będzie ich sporo. Praktyka czyni mistrza.

Odszukaj plik Wizytówka v1.0.exe i uruchom go. Teraz możesz przekazać znajomym swoją wirtualną wizytówkę.

UWAGA: większość serwerów mailowych zakazuje wysyłanie plików z rozszerzeniem *.exe. Dobrym rozwiązaniem jest dodanie pliku do archiwum i przesłanie.

Przykładowe rozwiązanie znajdziesz w dziale rozwiązania.

Wiemy, że wywołanie funkcji:

getch();

powoduje, że program oczekuje na podanie dowolnego znaku z klawiatury, a później wykonuje dalsze polecenia. Zobacz, co się stanie, jeżeli napiszemy coś takiego: (wybierz NOWY – PLIK ŹRÓDŁOWY)

cout<<"Witaj, wcisnij dowony klawisz, alby przeczytac instrukcje…"<getch();
cout<<"Program Instrukcje v1.0"<cout<<"Dziekujemy, wcisnij dowolny klawisz, aby zakonczyc";
getch();

Możemy w dowolnym miejscu programu wywołać funkcję getch(), tym samym zatrzymując jego działanie. Informacje, zdobyte podczas dotychczasowej edukacji będą bardzo pomocne w napisaniu niewielkiego programu, który skutecznie odstraszy innych użytkowników komputera przed korzystaniem np. z przeglądarki internetowej, gry lub innego programu.

Napisz program Error v1.0, który wypisuje na ekranie następującą treść (patrz: rozwiązania):

ERROR: program (tu wpisz nazwę programu, do którego chcesz zabronić dostępu) can not be opened

File config.sys can not be found

Press ANY KEY to continue…
(program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu wyświetla ):

Unxepected ERROR: unknown

Press ANY KEY to continue…
(program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu wyświetla ):

Unxepected ERROR: unknown

Press ANY KEY to continue…
(program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu wyświetla ):

Unxepected ERROR: unknown

Press ANY KEY to close program…
(program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu kończy działanie )

Baaardzo niegrzeczny program.

Przykładowo, nie chcemy, aby ktoś uruchamiał przeglądarkę internetową. (Jeśli mamy kilka przeglądarek, możemy nasz program zastosować do wszystkich). Tworzymy na pulpicie skrót do programu Error v1.0. Zmieniamy jego nazwę na identyczną jak nazwa skrótu przeglądarki internetowej na pulpicie. Klikamy PRAWYM PRZYCISKIEM MYSZY na ikonie skrótu przeglądarki, wybieramy WŁAŚCIWOŚCI, następnie klikamy ZMIEŃ IKONĘ… i kopiujemy do schowka adres pliku ikony. (PRAWY PRZYCISK MYSZY – KOPIUJ). Zamykamy okna i usuwamy lub chowamy właściwy skrót. Teraz klikamy na skrócie do naszego programu PRAWYM PRZYCISKIEM MYSZY, wybieramy WŁAŚCIWOSCI i ZMIEŃ IKONE… Pojawi się informacja, że dany program nie zawiera ikon. Nic nie szkodzi. Klikamy OK i do okienka „Szukaj ikon w pliku:” wklejamy ścieżkę dostępu do ikony właściwego programu PRAWY PRZYCISK MYSZY – WKLEJ (np. przeglądarki internetowej). Klikamy OK. Mamy już identycznie wyglądający skrót do programu Error v1.0. Umieszczamy go na miejscu poprzedniego skrótu i…czekamy na ofiarę. Jeżeli osoba orientuje się w temacie to niestety nie da się nabrać. Ale znając życie, 95% użytkowników wpadnie w pułapkę. Prawda, że programowanie jest ciekawe ;-)

Potrenuj jeszcze wypisywanie na ekran. Jeśli stwierdzisz, że idzie Ci to płynnie i bez zastanowienia, przejdź do kolejnej lekcji (lekcja 3).
Zadania:
Napisz program Towary v1.0, który wypisuje na ekran następującą treść:

Zakupione towary to:
Zeszyty A4...ilosc: 40szt.
Okładki......ilosc: 40szt.
Długopisy....ilosc: 100szt.
Plecaki......ilosc: 20szt.

Wciśnij dowolny klawisz, aby potwierdzic zamowienie
(program czeka na wcisnięcie klawisza)

Dziękujemy za potwierdzenie zamowienia.
Przesylka zostanie wyslana w nastepny dzien roboczy.

Adres wysylki:

Jan Kowalski
Kominki 45A
43-654 Warszawa
Wciśnij dowolny klawisz, aby zamknąć okno zamowienia
(program czeka na wcisnięcie klawisza i konczy dzialanie)

---

Więcej na Praktyczny kurs CPP


Artykuł pochodzi z serwisu www.Artelis.pl

Praktyczny kurs C++ za darmo - Czytelność kodu, zmienne

Praktyczny kurs C++ za darmo - Czytelność kodu, zmienne

Autorem artykułu jest Frycz Modrzewski



Czy czytelność kodu źródłowego jest ważna? Analogię możemy znaleźć w utrzymywaniu porządku w naszym pokoju. Gdy wszystkie rzeczy są na swoim miejscu, łatwiej je znajdziemy. Porządek ogólnie wpływa efektywność naszej pracy. Wiemy, gdzie są nasze rzeczy, szybciej je odnajdujemy, tym samym pracujemy lub uczymy się bardziej efektywnie

Analogię możemy znaleźć w utrzymywaniu porządku w naszym pokoju. Gdy wszystkie rzeczy są na swoim miejscu, łatwiej je znajdziemy. Porządek ogólnie wpływa efektywność naszej pracy. Wiemy, gdzie są nasze rzeczy, szybciej je odnajdujemy, tym samym pracujemy lub uczymy się bardziej efektywnie. Równiej lepiej jest odpoczywać w ładzie niż w zagraconym i zaśmieconym miejscu. Analogicznie, lepiej pracuje się z uporządkowanym, schludnie wyglądającym kodem, niż gdy wszystko jest porozrzucane lub sklejone w jednym miejscu. Szybciej znajdujemy interesujące nas polecenia, szybciej je modyfikujemy, szybciej kończymy pisać program. Dodawanie komentarzy znacznie ułatwia utrzymanie porządku. Przykładowo, miejsce, w którym nasz program oblicza średnią dwóch liczb oznaczamy //srednia dwóch liczb. Nie musimy się domyślać która linijka za to odpowiada. Mamy to jasno i wyraźnie napisane. A co, gdy do naszego pokoju lub biura wchodzi kolega albo szef? Wszystkie rzeczy, ubrania, notatki na podłodze, biurko zaśmiecone, nie można w ogóle przejść…tego chyba byśmy nie chcieli. Kiedyś na pewno kod źródłowy Twoich programów będzie udostępniony przez Ciebie np. w Internecie lub poprosisz kogoś o pomoc w rozwiązaniu jakiegoś problemu. O wiele przyjaźniej będzie postrzegane Twoje dzieło, gdy po jednym przeglądnięciu kodu, osoba czytająca zorientuje się co robi program.



Dlatego lepiej jest napisać:

cout<<"Witam, oto moj nowy program"<cout<<"PROGRAM v1.0"<cout<<"Autor: Jan Kowalski"<cout<<"Data: 23 Sierpnia 2010r"<cout<<"Wcisnij dowolny klawisz, aby zakonczyc"<getch();

niż

cout<<"Witam, oto moj nowy program"<
Różnicę widać gołym okiem. Staraj się pisać kod źródłowy w formie, jaka jest przedstawiona w kursie. Wyrobi to w Tobie nawyki, które na pewno nie wyjdą Ci na złe ;-)
Zmienne

Nasze dotychczasowe programy dużo mówiły, a mało robiły. Ogólnie chyba takie rzeczy (i ludzie) nie są lubiane. Program można wykorzystać np. do policzenia sumy, różnicy, średniej, reszty z dzielenia i wielu, wielu innych zadań.. Aby to zrobić, trzeba przesłać do programu liczby, na których będzie możliwe wykonanie tych operacji.

UWAGA: O przesyłaniu tekstu do programu opowiem w dalszej części kursu, gdyż twórcy języka C++ skomplikowali tą operacje tak bardzo, że chyba sam nie potrafiłbym zrobić tego lepiej. No cóź…tak to bywa…

Program przechowuje liczy w tzw. zmiennych lub stałych. Zapamiętaj, proszę te dwa słowa, gdyż będę je często używał. Każda zmienna lub stała może przechowywać liczbę określonego typu. Najpopularniejsze typy to: Liczba całkowita, nazwa tego typu to int. Liczba zawierająca przecinek (a właściwie kropkę) o nazwie typu float oraz zmienna typu char, przechowująca jeden, dowolny znak z klawiatury. Skupimy się na typach int i float.

Przykłady typu int (wypisane po średniku): 23; 45; 0; 1; -4; 200; 3453; -23; -542; itd.
Przykłady typu float (wypisane po średniku): 23.45; 1.3; 0.45; 3; 56; 546.3; 34; itd.

Liczby zaliczane do int mogą być również zaliczone to typu float, ale nie odwrotnie.

Aby móc używać zmiennej lub stałej, należy je najpierw zdefiniować w kodzie źródłowym. Na początku definicji zmiennej podajemy typ zmiennej, później nazwę.

Przykład definicji zmiennej typu int o nazwie wiek:

int wiek; //średnik na końcu!!!

Definicję umieszczamy najlepiej na początku programu (posłużę się pełnym kodem, aby miejsce umieszczenia definicji było jednoznaczne), czyli:

#include
#include
using namespace std;

int main()

{
int wiek; //definicja zmiennej typu int o nazwie wiek
//dalsza czesc programu
return 0;
}

Na razie nasza zmienna wiek nie ma żadnej konkretnej wartości. Możemy ją ustalić w kodzie źródłowym (do definicji dopisujemy np.: =34):

Zmienna typu int o nazwie wiek, której początkowa wartość wynosi 34:

int wiek=34;

lub pobrać z klawiatury w trakcie wykonywania programu. Inaczej jest w przypadku stałej. Stałą definiujemy następująco:

Piszemy słowo const, następnie typ stałej, nazwę, znak = oraz wartość stałej (tak samo można podać początkową wartość zmiennej). Przykład:

Stała typu float o nazwie pi, której wartość wynosi 3.1415:

const float pi=3.1415;

Definicję stałej również najlepiej umieścić na początku programu, chocaiaż nie jest to obowiązek (również używam pełnego kodu):

#include
#include
using namespace std;

int main()
{
int wiek; //definicja zmiennej typu int o nazwie wiek
const float pi=3.1415; //definicja stałej typu float o nazwie pi, której wartość wynosi 3.1415
//dalsza czesc programu
return 0;
}

UWAGA: Zamiast przecinka wpisujemy kropkę! 3.1415 a nie 3,1415

UWAGA: Po zdefiniowaniu zmiennej lub stałej, np.:

int wiek;

nie piszemy już typu, lecz tylko samą nazwę. Zmienna wiek jest zdefiniowana na samym początku jako int wiek. W dalszej części programu występuje tylko jako wiek. Jeszcze raz:

int wiek=34; //przykład definicji zmiennej

cout<
Błędne jest wyrażenie:

int wiek=34; //przykład definicji zmiennej

cout<
Stała ma już wartość, a zmienna nie. Dlatego należy ją podać. Służy do tego wyrażenie cin:

cin>>nazwa_zmiennej;

Zwróć uwagę na kierunek strzałek >> oraz średnik na końcu. Aby pobrać wartość zmiennej wiek, należy wpisać, najlepiej robiąc w kodzie linijkę wolnego miejsca:

cin>>wiek;

całość wygląda następująco:

int wiek; //definicja zmiennej typu int o nazwie wiek
const float pi=3.1415; //definicja stałej typu float o nazwie pi, której wartość wynosi 3.1415
//wolne miejsce
cout<<"Podaj swoj wiek: "; //znane polecenie
cin>>wiek; //pobranie wartości zmiennej wiek

Po wczytaniu zmiennej wiek, program kończy pracę. Zmienną wiek oraz stałą pi możemy wypisać używając znanego nam polecenia cout. Oto program:

int wiek; //definicja zmiennej typu int o nazwie wiek
const float pi=3.1415; //definicja stałej typu float o nazwie pi, której wartość wynosi 3.1415

cout<<"Podaj swoj wiek: "; //znane już polecenie
cin>>wiek; //pobranie wartości zmiennej wiek
cout<<"Liczba pi wynosi: "<cout<<"Masz "<getch();

Jak widać, wypisując tekst przy użyciu wyrażenia cout, możemy łączyć tekst umieszczony w cudzysłów oraz wartości zmiennych za pomocą <<.

W powyższym przykładzie cout<<"Masz "<
Ćwiczenie (rozwiązania):
Napisz program, który zapyta o aktualny rok i poinformuje nas o nim np.: „Mamy 2010 rok”.
Pamiętaj o:
definicji zmiennej rok (typ oraz nazwa),
zapytaniu o rok,
pobraniu wartości,
poinformowaniu użytkownika o aktualnym roku.



W jednym programie możemy zdefiniować wiele zmiennych tego samego typu. Przykład:

int wiek, rok, numer_domu;

Na początku podajemy typ zmiennych, a następnie wypisujemy ich nazwy po przecinku. Całość kończymy średnikiem.

Ćwiczenie (rozwiązania):
Napisz program, który zapyta o Twój wiek, numer domu oraz o aktualny rok, następnie wyświetli te dane na ekranie. (Pamiętaj o estetyce kodu źródłowego oraz wypisu danych).

Zmienne i stałe typu float oraz int są liczbami więc nic nie stoi na przeszkodzie, aby wykonywać na nich działania matematyczne. Napiszemy program, który pobierze z klawiatury dwie liczy, a następnie wykona na nich operacje: dodawania, odejmowania, mnożenia i dzielenia oraz pokaże wyniki tych działań. Zaczynamy od definicji dwóch zmiennych, którym przypiszemy z klawiatury wartości dwóch liczb. Zdefiniujemy również zmienną o nazwie wynik.

float liczba1, liczba2, wynik;

cout<<"Podaj wartosc pierwszej liczby: "<cin>>liczba1; //pobieramy jej wartość
cout<<"Podaj wartosc drugiej liczby: "<cin>>liczba2; //pobieramy jej wartość

wynik=liczba1+liczba2; //za zmienną wynik PODSTAWIAMY sumę liczb
cout<<"Suma liczb wynosi "<
wynik=liczba1-liczba2; //za zmienną wynik PODSTAWIAMY roznice liczb
cout<<"Roznica liczb wynosi "<
wynik=liczba1*liczba2; //za zmienną wynik PODSTAWIAMY iloczyn liczb
cout<<"Iloczyn liczb wynosi "<
wynik=liczba1-liczba2; //za zmienną wynik PODSTAWIAMY iloraz liczb
cout<<"Iloraz liczb wynosi "<
getch();

Dlaczego tak zaznaczyłem wyraz PODSTAWIAMY? Ponieważ w języku C++ znak równości = wcale nie oznacza równa się lecz podstaw. Czyli, gdy mamy:

wynik=liczba1+liczba2;

oznacza to: za wartość zmiennej wynik PODSTAW wartość sumy zmiennych liczba1 i liczba2. Równie dobrze można napisać:

wynik=34;

oznacza to: za wartość zmiennej wynik PODSTAW wartość 34.

Ćwiczenie (patrz: rozwiązania):
Napisz program, który zapyta o aktualny rok oraz Twój wiek. W odpowiedzi poinformuje o roku Twojego urodzenia.

Bardzo przydatnym operatorem, jest operator obliczający resztę z dzielenia, tzw. modulo. Jeżeli dodajemy liczby, schemat wygląda tak:

wynik=liczba1+liczba2;

Jeżeli chcemy obliczyć resztę z dzielenia liczby1 przez liczbę2 to robimy to wg. schematu:

wynik=liczba1%liczba2

UWAGA: liczba1 oraz liczba2 muszą być typu całkowitego int !!! Wynika to z własności dzielenia z resztą.

Przykładowy program, który oblicza resztę z dzielenia przez 2:

int liczba, wynik;

cout<<"Podaj liczbe: ";
cin>>liczba; //wczytanie liczby
wynik=liczba%2; //obliczenie reszty

cout<<"Reszta z dzielenia liczby "<getch();

Ćwiczenie (patrz: rozwiązania):
Napisz program, który sprawdza podzielność jednej liczby przez drugą. (Jeżeli reszta z dzielenia równa się 0 to liczba pierwsza jest podzielna przez drugą. Zapisz program jako Dzielenie v1.0.

Jeżeli reszta z dzielenia równa się 0 to pierwsza liczba jest podzielna przez drugą.

Fajnie byłoby gdyby można było napisać taki program, który rozpozna że reszta jest równa 0 i pokaże odpowiedni komunikat. Jeżeli natomiast reszta będzie różna od zera, pokaże inną, adekwatną do sytuacji wiadomość. Można to zrobić używając tzw. funkcji warunkowej if. Funkcji tej poświęcona jest kolejna lekcja, (lekcja 4).

---

Więcej na Praktyczny kurs CPP


Artykuł pochodzi z serwisu www.Artelis.pl

Praktyczny kurs C++ za darmo - funkcja warunkowa IF

Praktyczny kurs C++ za darmo - funkcja warunkowa IF

Autorem artykułu jest Frycz Modrzewski



Bez funkcji warunkowej if nie powstałby żaden program, gra czy witryna internetowa. Dzięki jej znajomości będziemy mogli sprawdzać różnego rodzaju warunki np.: czy pierwsza liczba jest podzielna przez drugą, czy kod PIN jest poprawny, sprawdzimy poprawność podanej daty, wieku. Spójrz, ile możliwość otwiera funkcja warunkowa if.

Jeszcze raz przytoczę zdanie:



Jeżeli reszta z dzielenia równa się 0 to pierwsza liczba jest podzielna przez drugą.

Teraz przetłumaczymy to zdanie na język C++:

Jeżeli:

if

reszta z dzielenia równa się 0:

(wynik==0)

UWAGA: w funkcji if warunki podajemy w nawiasach okrągłych ().

UWAGA: dwa znaki równości == oznaczają RÓWNA SIĘ, w przeciwieństwie do jednego znaku równości =, który oznaczał PODSTAW.

to pierwsza liczba jest podzielna przez drugą.

{
cout<<" pierwsza liczba jest podzielna przez druga"<}

A całość jest następująca:

if(wynik==0)
{
cout<<"pierwsza liczba jest podzielna przez druga"<}

Do zdania: Jeżeli reszta z dzielenia równa się 0 to pierwsza liczba jest podzielna przez drugą. możemy dopisać: Jeżeli nie, to liczba pierwsza nie jest podzielna przez drugą. Tłumaczymy:

Jeżeli nie:

else

to liczba pierwsza nie jest podzielna przez drugą.

{
cout<<"pierwsza liczba nie jest podzielna przez druga"<}

Teraz mamy już pełną obsługę programu Dzielenie v1.0, która wygląda następująco:

if(wynik==0) //sprawdzenie warunku
{
cout<<"pierwsza liczba jest podzielna przez druga"<}
else //jeżeli nie
{
cout<<"pierwsza liczba nie jest podzielna przez druga"<}

Jeżeli warunek będzie spełniony to zostanie wykonana instrukcja nr 1, jeżeli nie, to wykonana zostanie instrukcja nr 2.

UWAGA: w nawiasach klamrowych wpisujemy dowolną ilość instrukcji oddzielonych średnikami. Po nawiasach klamrowych NIE dajemy średnika:

if(wynik==0) //sprawdzenie warunku
{
cout<<"pierwsza liczba jest podzielna przez druga"<};//BŁĄD !!!
else //jeżeli nie
{
cout<<"pierwsza liczba nie jest podzielna przez druga"<};//BŁĄD !!!

Według mojego rozwiązania program Dzielenie v1.0 wygląda tak:

int liczba1, liczba2, wynik;

cout<<"Podaj pierwsza liczbe: ";
cin>>liczba1;
cout<<"Podaj druga liczbe: ";
cin>>liczba2;

wynik=liczba1%liczba2;

cout<<"Reszta z dzielenia liczby "<
getch();

Warunek sprawdzający należy dodać na końcu, po instrukcji

cout<<"Reszta z dzielenia liczby "<
czyli:

int liczba1, liczba2, wynik;

cout<<"Podaj pierwsza liczbe: ";
cin>>liczba1;
cout<<"Podaj druga liczbe: ";
cin>>liczba2;

wynik=liczba1%liczba2;

cout<<"Reszta z dzielenia liczby "<
if(wynik==0) //sprawdzenie warunku
{
cout<<"pierwsza liczba jest podzielna przez druga"<}
else //jeżeli nie
{
cout<<"pierwsza liczba nie jest podzielna przez druga"<}

getch();

Przetestuj działanie programu i zapisz go jako Dzielenie v1.1

Jeszcze jeden przykład, tym razem napiszemy program, który udostępni nam nasze dane, gdy wpiszemy poprawny kod PIN. Na początku załóżmy, że poprawnym kodem PIN będzie: 1753. Należy zdefiniować stałą pin oraz zmienną podany_pin, do której zostanie zapisany kod podany przez użytkownika. Kolejnym krokiem będzie porównanie wartości zmiennych podany_pin z pin i wypisanie odpowiedniego komunikatu. Zaczynamy:

const int pin=1753; //pin jest liczbą calkowitą, jej wartość to 1753
int podany_pin; //podany pin jest również liczbą całkowitą ;-)

cout<<"Prosze podac kod PIN: "<cin>>podany_pin; //wczytujemy kod z klawiatury
cout<<"Podany kod PIN to: "<
if(podany_pin==pin) //sprawdzamy warunek: jeżeli podany_pin RÓWNA SIĘ pin
{ //to
cout<<"Kod PIN jest poprawny"< cout<<"Oto Twoje dane:"< cout<<"Jan Kowalski"< cout<<"Kominki 56"< cout<<"34-683 Kielce"< cout<<"jankowalski@domena.pl"< cout<<"Dowolny klawisz, aby zakonczyc"<}
else //jeżeli natomiast kod PIN jest błędny to wtedy:
{
cout<<"kod PIN nie jest poprawny"< cout<<"Dowolny klawisz, aby zakonczyc"<}

getch();

Możesz zapisać ten program jako Dane v1.0 i przechowywać w nim drobne notatki lub niezbyt ważne informacje. Nie polecam zamieszczania w nim haseł, innych kodów PIN, loginów, bo ktoś może odnaleźć plik z kodem źródłowym i wszystko będzie do jego dyspozycji.
Zanim przejdziemy do obsługi daty – kilka zdań o budowie warunków w funkcji if.

Warunek nie musi dotyczyć tylko równości. Jedna wartość może być większa, mniejsza, większa lub równa albo mniejsza lub równa od drugiej. Mając zdefiniowane zmienne liczba1 i liczba2, warunki te określamy następująco:

if(liczba1==liczba2) //liczba1 RÓWNA SIĘ liczba2
if(liczba1!=liczba2) //liczba1 jest RÓŻNA od liczba2
if(liczba1if(liczba1>liczba2) //liczba1 jest WIEKSZA niż liczba2
if(liczba1<=liczba2) //liczba1 jest MNIEJSZA BĄDŹ RÓWNA liczba2
if(liczba1>=liczba2) //liczba1 jest WIĘKSZA BĄDŹ RÓWNA liczba2

Będziemy z tego korzystać przy obsłudze daty.

Warunki możemy również łączyć ze sobą, przykładowo jeżeli chcemy żeby liczba1 była większa od 0 a mniejsza od 13 to potrzebujemy dwóch warunków:

liczba1>0 i liczba1<13

Łącznik i w C++ to dwa znaczki &&. Przykład programu:

int liczba1=5;

if(liczba1>0 && liczba1<13)// dwa warunki
{
cout<<"Warunek spelniony"<}
else
{
cout<<"Warunek nie spelniony"<}
getch();

Jeżeli chcemy, aby liczba1 była mniejsza od 4 lub większa od 10, potrzebujemy warunków:

liczba1<4 lub liczba1>10

Łącznik lub w C++ to dwa znaczki ||

Przykład programu:

int liczba1=5;

if(liczba1<4 || liczba1>10)// dwa warunki
{
cout<<"Warunek spelniony"<}
else
{
cout<<"Warunek nie spelniony"<}
getch();
Umiemy łączyć warunki, przechodzimy do daty.

Poprawna obsługa daty to niesamowicie ważna sprawa. Podanie daty przez użytkownika wymagane jest w niektórych programach lub witrynach internetowych. Wszyscy wiedzą, że nie istnieje dzień 34.02.1976. Jednakże wszyscy się mogą pomylić i zamiast 03 wpisać 93. Naszym zadaniem będzie wychwycenie tych pomyłek.

Co trzeba sprawdzić? Zakładamy, że każda liczba większa od zera określa rok. Bo to prawda ;-) Kolejne miesiące określają liczby od 1 do 12. Natomiast liczbę dni miesiąca warunkuje miesiąc (liczba dni stycznia jest inna niż liczba dni kwietnia czy listopada), oraz rok w przypadku lutego (w zależności czy rok jest przestępny czy nie).

Sprawdzamy rok. Program nazywa się Poprawny Rok v1.0 i przepuszcza każdą liczbę większą od 0.

int rok;

cout<<"Podaj rok: "<cin>>rok; //wczytujemy rok

if(rok>0) //sprawdzamy poprawność podanego roku
{
cout<<"Podany rok jest poprawny"<}
else
{
cout<<"Podany rok nie jest poprawny"<}

getch();

Teraz miesiąc. Piszemy program Poprawmy Miesiąc v1.0, przepuszczający liczbę większą od 0 i mniejszą od 13.

int miesiac;

cout<<"Podaj miesiac: "<cin>>miesiac; //wczytujemy miesiąc

if(miesiac>0 && miesiąc<13) //sprawdzamy poprawność podanego miesiąca
{
cout<<"Podany miesiac jest poprawny"<}
else
{
cout<<"Podany miesiac nie jest poprawny"<}
getch();

Pamiętasz to?

UWAGA: w nawiasach klamrowych wpisujemy dowolną ilość instrukcji oddzielonych średnikami. Po nawiasach klamrowych NIE dajemy średnika.

Oznacza to, że

if(warunek)
{
// tutaj
}
else
{
// i tutaj
}

możemy wpisać dowolną instrukcję, nawet koleją funkcję if.

Przyda się to przy sprawdzeniu, czy rok jest przestępny. Najpierw należy sprawdzić czy rok jest poprawny, dopiero później czy jest przestępny. Tak wygląda program Poprawny Rok v1.0

int rok;

cout<<"Podaj rok: "<cin>>rok; //wczytujemy rok

if(rok>0) //sprawdzamy poprawność podanego roku
{
cout<<"Podany rok jest poprawny"<
// tutaj wstawimy warunek sprawdzający, czy rok jest przestępny

}
else
{
cout<<"Podany rok nie jest poprawny"<}
getch();

Rok jest przestępny, gdy jest podzielny przez 100 lub przez 4. Przeanalizuj poniższy warunek:

if((rok%100)==0 || (rok%4)==0)
{
cout<<"Rok jest przestepny"<}
else
{
cout<<"Rok nie jest przestepny"<}

Wyrażenie (rok%100) to nic innego jak reszta z dzielenia wartości rok przez 100, a (rok%4) to reszta z dzielenia wartości rok przez 4. Więc cały warunek brzmi:

Jeżeli reszta z dzielenia wartości rok przez 100 jest równa 0 lub reszta z dzielenia wartości rok przez 4 jest równa 0 to rok jest przestępny. Jeżeli nie, to rok nie jest przestępny.

Wstawmy ten warunek do programu Poprawny Rok v1.0:

int rok;

cout<<"Podaj rok: "<cin>>rok; //wczytujemy rok

if(rok>0) //sprawdzamy poprawność podanego roku
{
cout<<"Podany rok jest poprawny"<
if((rok%100)==0 || (rok%4)==0) //wstawiony warunek stąd…
{
cout<<"Rok jest przestepny"< }
else
{
cout<<"Rok nie jest przestepny"< } //…dotąd
}
else
{
cout<<"Podany rok nie jest poprawny"<}
getch();

Po wstawieniu takiego warunku, czytelność kodu troszeczkę się zmniejsza. Żeby nie pogubić się w gąszczu nawiasów klamrowych należy używać tabulatora. Wstawiony warunek jest przesunięty w stosunku do pozostałego kodu, dzięki temu widzimy które dwa nawiasy stanową parę. Zapisz program jako Przestepny Rok v1.0.

Pominięcie nawiasu spowoduje nie zamknięcie bloku instrukcji. Kompilator nie podaruje nam tego i stanowczo zaprotestuje kompilowanie naszego kodu.

UWAGA: Jeżeli masz wrażenie, że nie do końca coś rozumiesz, jeżeli gubisz się w tych klamrach, warunkach umieszczonych w warunkach to spokojnie jeszcze raz przeanalizuj sobie działanie programu Poprawny Rok v1.1.

Gdy uczyłem się C++ to czytałem ten sam kod kilkanaście razy, zanim go zrozumiałem ;-)

Ćwiczenie (rozwiązania):
W ramach ćwiczeń i lepszego zrozumienia napisz program, który stwierdza, czy z podanych trzech długości odcinków da się zbudować trójkąt. Długości boków nie mogą być ujemne. Aby z trzech odcinków zbudować trójkąt, suma dwóch z nich musi być większa niż trzeciego. Niech boki będą miały długość a, b i c.

Warunek: a+b>c i b+c>a i a+c>b

I wersja (łatwiejsza): program pobiera długości trzech boków, następnie sprawdza czy wszystkie są dodatnie. Jeżeli przynajmniej jeden jest ujemny, informuje o tym i kończy działanie. Jeśli nie, sprawdza warunek napisany powyżej i odpowiednio informuje użytkownika.

II wersja (zalecana): Program pobiera długość boku i od razu sprawdza czy jest dodatnia. Jeśli tak, pobiera kolejny bok, jeśli nie, kończy działanie. Gdy wszystkie długości boków zostaną pobrane, wtedy sprawdza czy da się z nich zbudować trójkąt.

Program zapisz jako Trójkąt v1.0.

Jeżeli stworzenie wersji zalecanej nie stworzyło Ci trudności, więc daty do pestka. Sprawdziliśmy poprawność roku i miesiąca. Teraz poprawność dnia miesiąca.
Miesiąc ma 31 dni, gdy jego numer wynosi: 1; 3; 5; 7; 8; 10; 12.
Miesiąc ma 30 dni, gdy jego numer wynosi: 4; 6; 9; 11.
Miesiąc ma 28 dni, gdy jego numer wynosi 2 i rok nie jest przestępny lub ma 29 dni, gdy jego numer wynosi 2 i rok jest przestępny.

Program sprawdzający poprawność dnia musi zatem mieć informację o jaki miesiąc oraz rok nam chodzi. Na początek spokojnie, zdefiniujemy sobie stałą miesiąc i rok oraz z góry założymy ich wartości. Następnie będziemy sprawdzać powyższe warunki.

const int miesiac=2; // czyli mamy maj ;-)
const int rok=2004;
int dzien;

cout<<"Podaj dzien: "; //prosimy o dzień
cin>>dzien; //wczytujemy dzień
// i zaczynamy sprawdzanie, czy to miesiąc, który ma 31 dni
if(miesiac==1 || miesiac==3 || miesiac==5 || miesiac==7 || miesiac==8 || miesiac==10 || miesiac==12)
{
if(dzien>0 && dzien<32) //jeśli tak, to sprawdzamy, czy dzień mieści się w przedziale
{
cout<<"Dzien jest poprawny"< }
else
{
cout<<"Dzien mie jest poprawny"< }
}
else //jeśli nie ma 31 dni, to może ma 30?
{
if(miesiac==4 || miesiac==6 || miesiac==9 || miesiac==11)
{
if(dzien>0 && dzien<31) //jeśli tak, to sprawdzamy, czy dzień mieści się w przedziale
{
cout<<"Dzien jest poprawny"< }
else
{
cout<<"Dzien mie jest poprawny"< }
}
else //jeśli nie ma 31 ani 30 dni to może 28 albo 29?
{
if(miesiac==2)
{
if((rok%100)==0 || (rok%4)==0) //sprawdzamy czy to rok przestępny
{
if(dzien>0 && dzien<30) //jeśli tak, to sprawdzamy przedział
{
cout<<"Dzien jest poprawny"< }
else
{
cout<<"Dzien mie jest poprawny"< }
}
else //jeżeli rok nie jest przestępny
{
if(dzien>0 && dzien<29) //to dzień czy dzień należy do przedziału?
{
cout<<"Dzien jest poprawny"< }
else
{
cout<<"Dzien mie jest poprawny"< }
}
}
}
}

getch();

Jeszcze raz przeczytaj kod i komentarze do niego. Jeśli pojawia się w Twojej głowie pytanie: Dlaczego tak? to przeanalizuj wcześniejsze przykłady, kolejny raz przeanalizuj powyższy kod. Wszystkich pytań: Dlaczego tak? nie da się wyeliminować ;-) Na końcu rozdziału są zadania do samodzielnego rozwiązania, które rozjaśnią sytuację.

A teraz uwieńczenie nauki funkcji if, czyli piszemy program Poprawna Data v1.0, sprawdzający poprawność wprowadzonej daty i wypisujący odpowiedni komunikat.

Na początku podajemy rok, program sprawdza jego poprawność. Jeśli rok jest poprawny, podajemy miesiąc. Gdy miesiąc jest w porządku, podajemy dzień, który zostaje sprawdzony.

int rok, miesiac, dzien;


cout<<"Podaj rok: "; //prosimy o rok
cin>>rok; //pobieramy rok

if(rok>0) //sprawdzamy. Jeżeli rok jest poprawny…
{
cout<<"Podaj miesiac: "; //…prosimy o miesiąc
cin>>miesiac; //pobieramy miesiąc

if(miesiac>0 && miesiac<13) //jeśli miesiąc jest poprawny…
{
cout<<"Podaj dzien: "; //…prosimy o dzien
cin>>dzien; //pobieramy dzien

//tutaj wstawimy warunek sprawdzający poprawność dnia

}
else //jeśli miesiąc nie jest poprawny
{
cout<<"miesiac nie jest poprawny"< }
}
else //jeżeli rok nie jest poprawny
{
cout<<"Rok nie jest poprawny"<}

getch();
Oto dzieło w całości:

int rok, miesiac, dzien;


cout<<"Podaj rok: "; //prosimy o rok
cin>>rok; //pobieramy rok

if(rok>0) //sprawdzamy. Jeżeli rok jest poprawny…
{
cout<<"Podaj miesiac: "; //…prosimy o miesiąc
cin>>miesiac; //pobieramy miesiąc

if(miesiac>0 && miesiac<13) //jeśli miesiąc jest poprawny…
{
cout<<"Podaj dzien: "; //…prosimy o dzien
cin>>dzien; //pobieramy dzien

if(miesiac==1 || miesiac==3 || miesiac==5 || miesiac==7 || miesiac==8 || miesiac==10 || miesiac==12)
{
if(dzien>0 && dzien<32) //jeśli tak, to sprawdzamy, czy dzień mieści się w przedziale
{
cout<<"Dzien jest poprawny"< }
else
{
cout<<"Dzien mie jest poprawny"< }
}
else //jeśli nie ma 31 dni, to może ma 30?
{
if(miesiac==4 || miesiac==6 || miesiac==9 || miesiac==11)
{
if(dzien>0 && dzien<31) //jeśli tak, to sprawdzamy, czy dzień mieści się w przedziale
{
cout<<"Dzien jest poprawny"< }
else
{
cout<<"Dzien mie jest poprawny"< }
}
else //jeśli nie ma 31 ani 30 dni to może 28 albo 29?
{
if(miesiac==2)
{
if((rok%100)==0 || (rok%4)==0) //sprawdzamy czy to rok przestępny
{
if(dzien>0 && dzien<30) //jeśli tak, to sprawdzamy przedział
{
cout<<"Dzien jest poprawny"< }
else
{
cout<<"Dzien mie jest poprawny"< }
}
else //jeżeli rok nie jest przestępny
{
if(dzien>0 && dzien<29) //to dzień czy dzień należy do przedziału?
{
cout<<"Dzien jest poprawny"< }
else
{
cout<<"Dzien mie jest poprawny"< }
}
}
}
}
}
else //jeśli miesiąc nie jest poprawny
{
cout<<"miesiac nie jest poprawny"< }
}
else //jeżeli rok nie jest poprawny
{
cout<<"Rok nie jest poprawny"<}

getch();

Patrzysz na ten kod z przerażeniem? Nie martw się ja też. Sam się sobie dziwie że potrafiłem coś takiego napisać :D Powyższy program traktuj bardziej jako poglądowy, pokazujący możliwości funkcji if i nie przejmuj się, że nie potrafisz tego napisać. Jeśli potrafisz to wielki pokłon w Twoją stronę i szacunek ;-)

Pamiętasz zadania po lekcji 3, służące do obliczania pól i objętości? W kolejnej lekcji połączymy te programy w jeden, z możliwością wyboru figury lub bryły której pole lub objętość będziemy chcieli obliczyć (lekcja 5).


---

Więcej na Praktyczny kurs CPP


Artykuł pochodzi z serwisu www.Artelis.pl

Praktyczny kurs C++ za darmo - pętla WHILE i DO WHILE

Praktyczny kurs C++ za darmo - pętla WHILE i DO WHILE

Autorem artykułu jest Frycz Modrzewski



Pętle to również dobry wynalazek. Umożliwiają one cykliczne powtarzanie tego samego fragmentu programu. Umiejętne wykorzystane tego może posłużyć do tworzenia bardzo ciekawych aplikacji np.: program z menu, sprawdzanie poprawności podanych wartości, wczytywanie danych z pliku, pobieranie wartości z tablic i wiele, wiele innych.

Pętla ta działa następująco: Gdy spełniony jest warunek to wykonuj instrukcje



Gdy

while

spełniony jest warunek

(warunek)

to wykonuj instrukcje

{
// instrukcje
}

Całość:

while(warunek)
{
//instrukcje
}

Dla przykładu, program, który wypisuje na ekran liczby całkowite od zera do wartości wybranej przez użytkownika (ograniczenie):

int ograniczenie; // tu przypiszemy ograniczenie
int i=0; // tę wartość będziemy zwiększać od 0 do ograniczenia

cout<<"podaj ograniczenie: "<cin>>ograniczenie; // program pobiera ograniczenie

while(i<=ograniczenie) //gdy i mniejsze bądź równe ograniczenie to
{
cout<<"liczba "<
i=i+1; // WAŻNE: tu zwiększamy wartość i o jeden
// bo wiemy już, że znak = oznacza PODSTAW, czyli za i podstaw i+1
} // tutaj pętla zawraca i jeszcze raz sprawdza warunek

getch();

Kolejny przykład: program wypisuje na ekran liczby całkowite od wartości wybranej do zera:

int ograniczenie; // tu przypiszemy ograniczenie
int i; // tym razem i musi mieć wartość ograniczenia, jeszcze jej nie znamy

cout<<"podaj ograniczenie: "<cin>>ograniczenie; // program pobiera ograniczenie, teraz je znamy więc…

i=ograniczenie; // teraz i ma wartość ograniczenia

while(i>=0) //gdy i WIĘKSZE bądź równe 0
{
cout<<"liczba "<
i=i-1; // WAŻNE: tu zmniejszamy wartość i o jeden
} // tutaj pętla zawraca i jeszcze raz sprawdza warunek

getch();

UWAGA: w języku C++, zamiast pisać i=i+1 można krótko: i++. Teraz już wiesz, skąd nazwa C++. Zamiast i=i-1 można użyć i--. Zapamiętaj te skróty.

Wiem, wiem, myślisz, że te przykłady są bez sensu i nie wnoszą niczego nowego. Za karę jeszcze kilka równie głupich i jeszcze bardziej bez sensu przykładów do samodzielnego napisania ;-)

Napisz program, który wypisuje na ekranie Twoje imię wybraną przez Ciebie ilość razy (rozwiązania).
Napisz program, który wypisuje na ekranie liczy od 0 do wybranego ograniczenia co 10, czyli 0, 10, 20, 30…itd. (rozwiązania).

Chodzi o to, aby została zrozumiana przez Ciebie zasada działania i idea pętli while. Pętla będzie wykonywała instrukcje, tak długo jak będzie spełniony warunek. W naszym pierwszym przykładzie warunkiem jest to, aby liczba była mniejsza od ograniczenia. Jeśli będzie mniejsza, to zostanie wypisana na ekran i zwiększona o jeden, Jeśli nie, to pętla zostanie przerwana.

Podobnie jak w funkcji if, między nawiasami klamrowymi instrukcji while możemy wpisać dowolną ilość instrukcji. Powróć do pierwszego przykładu z tej lekcji. Zmodyfikujemy go poprzez wstawienie do pętli while funkcji if i dzięki temu zaznaczymy, która liczba jest parzysta.

int ograniczenie;
int i=0;

cout<<"podaj ograniczenie: "<cin>>ograniczenie;

while(i<=ograniczenie)
{
cout<<"liczba "< if((i%2)==0) // tu wstawiamy funkcje if
{
cout<<" – liczba parzysta"< }

i=i+1;
}

getch();

Teraz program, który żąda wciśnięcia klawisza z cyfrą 1. Pętla będzie działać tak długo jak długo nie będziemy chcieli wybrać klawisza 1:

char znak; // tu zapiszemy wciśnięty klawisz

cout<<"wcisnij klawisz 1: "<znak=getch(); // program pobiera znak

while(znak!='1') //jeśli nie wybraliśmy 1
{
cout<<"Zły klawisz! "<
cout<<"wcisnij klawisz 1: "< znak=getch(); // program pobiera znak

} // tutaj pętla zawraca i jeszcze raz sprawdza warunek

Zauważ, że w tym przypadku nie potrzeba wywoływania funkcji getch() na końcu programu. Taka pętla mogłaby posłużyć do napisania programu, który wielokrotnie wyświetla menu. Rozbudujmy go dalej i dodajmy dwie opcje wyboru.
Menu

char znak; // tu zapiszemy wciśnięty klawisz

cout<<"MENU"<cout<<"1 – pole trojkata "<cout<<"2 – pole prostokata "<cout<<"3 - zakoncz "<
znak=getch(); // program pobiera znak
while(znak!='3') //jeśli nie wybraliśmy 3, czyli nie chcemy kończyć to:
{
if(znak=='1') // po kolei sprawdzamy wybór użytkownika
{
cout<<"Program obliczy pole trojkata"< }
if(znak=='2')
{
cout<<"Program obliczy pole prostokata"< }
if(znak!='1' && znak!='2') //jeśli użytkownik nie wybrał ani 1 ani 2
{
cout<<"Nie ma takiej opcji"< }

cout<<"Wybierz opcje"<znak=getch();// jeszcze raz dokonujemy wyboru

} // tutaj pętla zawraca i jeszcze raz sprawdza warunek

Skoro mamy dwie opcje więc co stoi na przeszkodzie aby dodać kolejną i kolejną? Nic. Wystarczy dopisać do menu koleją opcję i kolejną funkcję if. Uzupełnij powyższy program o dodatkową opcję "oblicz pole koła". Po uzupełnieniu mamy schemat programu, do którego neleży wstawić instrukcje z programu Menu v1.0.

Po wstawieniu otrzymujemy w pełni działający program, w którym możemy wielokrotnie wybierać opcje i obliczać pola. Zapisz program jako Menu v1.1.

char znak; // tu zapiszemy wciśnięty klawisz
const float pi=3.1415; // zmienne potrzebne do obliczeń
float wys_t, podst_t, prom_kola, boka_prost, bokb_prost, wynik;

cout<<"MENU"<<<<; // tworzymy menu
cout<<"1 – pole trojkata "<cout<<"2 – pole prostokata "<cout<<"3– pole prostokata "<cout<<"4 - zakoncz "<
znak=getch(); // program pobiera znak
while(znak!='4') //jeśli nie wybraliśmy 4, czyli nie chcemy kończyć to:
{
if(znak=='1') // sprawdzamy czy została wybrana opcja 1
{
cout<<"Program obliczy pole trojkata"< cout<<"Podaj wysokosc: ";
cin>>wys_t;
cout<<"Podaj dlugosc podstawy: ";
cin>>podst_t;

if(wys_t>0 "" podst_t>0)
{
wynik=(wys_t*podst_t)/2;
cout<<"Pole trojkata wynosi "< }
else
{
cout<<"Wymiary nie moga byc ujemne!"< }
}

if(znak=='2') // a może opcja 2
{
cout<<"Program obliczy pole kola"< cout<<"Podaj promien: ";
cin>>prom_kola;

if(prom_kola>0)
{
wynik=prom_kola*prom_kola*pi;
cout<<"Pole kola wynosi "< }
else
{
cout<<"Wymiary nie moga byc ujemne!"< }
}

if(znak=='3') // opcja 3?
{
cout<<"Program obliczy pole postokata"< cout<<"Podaj dlugosc boku a: ";
cin>>boka_prost;
cout<<"Podaj dlugosc boku b: ";
cin>>bokb_prost;

if(boka_prost>0 "" bokb_prost>0)
{
wynik=boka_prost*bokb_prost;
cout<<"Pole prostokata wynosi "< }
else
{
cout<<"Wymiary nie moga byc ujemne!"< }
}

if(znak!='1' "" znak!='2' "" znak!='3' ) // a może żadna z nich
{
cout<<"Nie ma takiej opcji"<}

cout<<"Wybierz opcje"<znak=getch();// jeszcze raz dokonujemy wyboru

} // tutaj pętla zawraca i jeszcze raz sprawdza warunek

Pętla while może również służyć do kontroli podawanych długości np.: długości boków lub wysokości. Tym razem jednak program nie będzie musiał kończyć działania zaraz po pierwszej błędnie podanej wartości. Będzie czekał tak długo i tak długo informował nas o błędzie aż w końcu się nauczymy i podamy wartość nieujemną. Tylko co zrobić, jeśli będziemy chcieli podać długość 30? Wtedy trzeba nacisnąć klawisze 3 i 0 a wiemy, że zmienna typu char przechowuje tylko jeden znak. Dlatego należy zastosować zmienne typu int lub float.

Prosty program obliczający pole prostokąta:

float a, b, wynik; // długości boków i wynik

cout<<"Podaj długosc boku a: "<cin>>a;
cout<<"Podaj długosc boku b: "<cin>>b;

wynik=a*b;
cout<<"pole wynosi "<
getch();

A po modyfikacji:

float a, b, wynik; // długości boków i wynik

cout<<"Podaj długosc boku a: "<cin>>a;

while(a<=0) //sprawdzamy czy długosc jest poprawna
{ // jeśli nie to
cout<<"Długosci nie mogą być ujemne!"< cout<<"Podaj długosc boku a: "< cin>>a;
}

cout<<"Podaj długosc boku b: "<cin>>b;

while(b<=0) //sprawdzamy czy długosc jest poprawna
{ // jeśli nie to
cout<<"Długosci nie mogą być ujemne!"< cout<<"Podaj długosc boku b "< cin>>b;
}

wynik=a*b;
cout<<"pole wynosi "<
getch();

Myślę, że po tym przykładzie idea, zasady użycia i zastosowanie pętli while nie pozostawia wątpliwości. Teraz możesz już napisać program Menu v1.2, który będzie czekał do skutku na podanie wartości większej od zera.

Zauważ taką rzecz: w pętli while warunek sprawdzany jest za początku, następnie wykonywane są instrukcje. Wspominałem również o pętli DO WHILE. Różnica między tymi dwiema pętlami jest właśnie taka, że w pętli WHILE warunek sprawdzany jest na początku a w pętli DO WHILE – na końcu.
Schemat pętli DO WHILE

do
{
//instrukcje
}
while(warunek); //średnik!

Trudno jest jednoznacznie powiedzieć kiedy używać jednej a kiedy drugiej. Zależy to od konkretnego problemu, jaki chcemy rozwiązać. Pokarzę programy napisane z użyciem jednej i drugiej pętli.

Program pobiera z klawiatury dowolne liczby. Gdy zostanie wybrane zero, pobieranie zostaje zakończone. (Użyteczne w programie pobierającym liczby i obliczający średnią np. ocen)

float liczba;

cout<<"Podaj liczbe (0 – konczy wpis): "<
do
{
cin>>liczba;
}
while(liczba!=0);

Przy użyciu WHILE:

float liczba;

cout<<"Podaj liczbe (0 – konczy wpis): "<cin>>liczba; // trzeba wczytać wartość aby można było sprawdzić warunek

while(liczba!=0)
{
cin>>liczba;
}

Działają identycznie. W tym przypadku niewiele mniej pisania jest przy użyciu DO WHILE. Skoro takie wczytywanie liczb można wykorzystać do obliczania średniej, więc napiszmy taki program. Aby obliczyć średnią potrzebujemy sumę wszystkich liczb oraz ich ilość.

float liczba; // tu zapiszemy liczbę pobraną z klawiatury
float suma=0; // to będzie suma liczb, na początku wynosi 0
float srednia; // do tej zmiennej przypiszemy średnią
int n=0; // tego użyjemy do zliczania ilości liczb
// wartość początkowa 0, gdyż na początku mamy zero liczb ;-)

cout<<"Podaj liczbe (0 – koniec wpisu):"; // prosimy o liczbę
cin>>liczba; // pobieramy liczbę

while(liczba!=0) //jeżeli liczba jest różna od zera to
{
suma=suma+liczba; //powiększamy sumę o wartość podanej liczby
n++; // zwiększamy o jeden ilość liczb

cout<<"Podaj liczbe (0 – koniec wpisu):"; // i po raz kolejny wczytujemy liczbę
cin>>liczba;
} // gdy podamy zero, pętla kończy działanie
if(n>0) // sprawdzamy czy ilość podanych liczb jest większa od 0
{
srednia=suma/n; //jeśli tak, obliczamy średnią
cout<<"Srednia liczb wynosi "<}
else // jeżeli nie podano liczb
{
cout<<"Nie podano zadnej liczby!"; // informujemy o tym
}

getch();

Zapisz program jako Średnia v1.0. Możesz go użyć do obliczania średnich: ocen, wydatków, dochodów, pomiarów itd. Program można wzbogacić o dodatkowe warunki choćby liczenie średniej tylko liczb dodatnich. Przykład:

float liczba;
float suma=0;
float srednia;
int n=0;

cout<<"Podaj liczbe większą od 0 (0 – koniec wpisu):";
cin>>liczba;

while(liczba!=0)
{
if(liczba>0) //tutaj dajemy warunek. Jeśli liczna jest >0
{
suma=suma+liczba; // to zostanie dodana do sumy
n++; // a ilość liczb zostanie zwiększona o 1
}
cout<<"Podaj liczbe (0 – koniec wpisu):";
cin>>liczba;
}
if(n>0)
{
srednia=suma/n;
cout<<"Srednia liczb dodatnich wynosi "<}
else
{
cout<<"Nie podano zadnej liczby!";
}

getch();

Do pętli while i do while jeszcze powrócimy, gdyż na pewno jeszcze się przydadzą. W kolejnej części kursu (lekcja 7) opowiem, jak ułatwić sobie życie, stosując pętle FOR. Jest to lepsza wersja pętli WHILE, jeżeli chodzi np. o wypisanie liczb z żądanego przedziału.

---

Więcej na Praktyczny kurs CPP


Artykuł pochodzi z serwisu www.Artelis.pl

Praktyczny kurs C++ za darmo - funkcja getch(), instrukcja switch

Praktyczny kurs C++ za darmo - funkcja getch(), instrukcja switch

Autorem artykułu jest Frycz Modrzewski



Łączymy kilka programów w jeden, z możliwością wyboru przez użytkownika. Na początek wprowadzenie. Wywołując funkcję getch() sprawiamy, że program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu, wykonywane są dalsze instrukcje. Getch() jednak nie 'marnuje' wybranego klawisza. Zwraca go, dlatego możemy go przypisać do zmiennej.

Wywołując funkcję getch() sprawiamy, że program czeka na wciśnięcie dowolnego klawisza. Po wciśnięciu, wykonywane są dalsze instrukcje. Getch() jednak nie 'marnuje' wybranego klawisza. Zwraca go (o zwracaniu wartości przez funkcję będzie mowa w dalszej części kursu), dlatego możemy go przypisać do zmiennej. Domyślam się, że nie wiele Ci to mówi, więc dla lepszej wizualizacji – przykład:

cout<<"Wcisnij dowolny klawisz:"<getch();
cout<<"Dziekujemy, wcisnij dowolny klawisz, aby wyjsc";
getch();

Bardzo prosty i przyjemny pogram. A teraz zmodyfikujmy kod źródłowy, definiując zmienną typu char. Jest to zmienna, przechowująca JEDEN znak. Może to być dowolny znak z klawiatury, czyli np.: a, b, c, 1, 4, @, $, &, +, \...i wiele, wiele innych.

O znakach i ich numerach dowiesz się więcej TUTAJ (Kod ASCII)

char znak; // zmienna typu char o nazwie znak

cout<<"Wcisnij dowolny klawisz: "<znak=getch(); // za zmienną znak podstawiamy wartość zwracaną przez getch()
cout<<"Zostal wcisniety klawisz "<
getch();

Warto zapamiętać, w jaki sposób przypisać wartość wciśniętego klawisza do zmiennej typu char, będzie to bardzo pomocne:

znak=getch();

Skoro program wie jaki klawisz został wybrany z klawiatury, więc aż się prosi, żeby użyć instrukcji if do skonstruowania warunku.

char znak; // zmienna typu char o nazwie znak

cout<<"Wcisnij dowolny klawisz: "<znak=getch(); // za zmienną znak podstawiamy wartość zwracaną przez getch()
cout<<"Zostal wcisniety klawisz "<
if(znak=='a')
{
cout<<"Pelny dostep"<}
else
{
cout<<"Brak dostepu"<}

getch();

UWAGA: Wszystkie znaki zapisujemy w cudzysłowie ' '.

if(znak=='a') // znak a jest w cudzysłowie ' '

również liczby. Pominięcie cudzysłowu jest błędem, a w przypadku liczb spowoduje inne działanie niż byśmy chcieli.

Każdy znak na klawiaturze ma przyporządkowany numer. Np. Enter na numer 13, Spacja ma 32 a cyfra 5 ma numer 53, (Kod ASCII) także jeżeli zapiszemy warunek następująco:

if(znak==5)

to program nie wykona żądanej instrukcji po wciśnięciu klawisza z cyfrą 5, lecz będzie żądał znaku o numerze 5. Poprawny warunek to

if(znak=='5')

Ćwiczenie (rozwiązania):
Napisz program, który prosi o wciśnięcie klawisza z cyfrą 1. Jeżeli wciśniętym klawiszem będzie cyfra 1 to zakomunikuje, ze procedura została wykonana poprawnie. Jeżeli będzie to cyfra różna od 1, to program powie, że pomyliliśmy instrukcje, jeżeli natomiast nie będzie to cyfra, zostanie wyświetlony komunikat, że program nie rozpoznaje żądania. Cyfry od 1 do 9 mają numery od 49 do 57. Podpowiedź: Łatwiej będzie posłużyć się numerami znaków z kodu ASCII a nie samymi znakami. Pamiętaj o odpowiedniej konstrukcji warunku.

Jeśli potrafisz wykonać to ćwiczenie to stworzenie własnego menu to żaden problem. Jeśli nie, to nie przejmuj się. Menu musi działać w następujący sposób: po wybraniu określonego klawisza wykona się żądana instrukcja. Przykładowo do wyboru są trzy opcje 1, 2 i 3 lub a, b i c. Po wciśnięciu 1 program obliczy pole trójkąta a po wybraniu 2 – pole prostokąta itd. Zabieramy się do pracy.

char znak; // do tej zmiennej przypiszemy nasz wybór

cout<<"MENU"<cout<<"1 – Pole trojkata"<cout<<"2 – Pole kola"<cout<<"3 – Pole prostokata"<
znak=getch(); // pobieramy znak

if(znak=='1') // i po kolei sprawdzamy wszystkie możliwości wyboru
{
cout<<"Program obliczy pole trojkata"<}

if(znak=='2')
{
cout<<"Program obliczy pole kola"<}

if(znak=='3')
{
cout<<"Program obliczy pole postokata"<}

if(znak!='1' && znak!='2' && znak!='3' )
{
cout<<"Nie ma takiej opcji"<}

getch();

No, teraz to już całkiem nieźle wygląda ;-) Teraz uzupełnij kod źródłowy tak, aby można było obliczyć wybrane pole. Instrukcja if jest już opanowana, więc do dzieła. Program zapisz jako Menu v1.0. Przykładowe rozwiązanie znajduje się poniżej:

char znak; // do tej zmiennej przypiszemy nasz wybór

const float pi=3.1415;
float wys_t, podst_t, prom_kola, boka_prost, bokb_prost, wynik;

cout<<"MENU"<cout<<"1 - Pole trojkata"<cout<<"2 - Pole kola"<cout<<"3 - Pole prostokata"<
znak=getch();

if(znak=='1')
{
cout<<"Program obliczy pole trojkata"< cout<<"Podaj wysokosc: ";
cin>>wys_t;
cout<<"Podaj dlugosc podstawy: ";
cin>>podst_t;

if(wys_t>0 && podst_t>0)
{
wynik=(wys_t*podst_t)/2;
cout<<"Pole trojkata wynosi "< }
else
{
cout<<"Wymiary nie moga byc ujemne!"< }
}

if(znak=='2')
{
cout<<"Program obliczy pole kola"< cout<<"Podaj promien: ";
cin>>prom_kola;

if(prom_kola>0)
{
wynik=prom_kola*prom_kola*pi;
cout<<"Pole kola wynosi "< }
else
{
cout<<"Wymiary nie moga byc ujemne!"< }
}

if(znak=='3')
{
cout<<"Program obliczy pole postokata"< cout<<"Podaj dlugosc boku a: ";
cin>>boka_prost;
cout<<"Podaj dlugosc boku b: ";
cin>>bokb_prost;

if(boka_prost>0 && bokb_prost>0)
{
wynik=boka_prost*bokb_prost;
cout<<"Pole prostokata wynosi "< }
else
{
cout<<"Wymiary nie moga byc ujemne!"< }
}

if(znak!='1' && znak!='2' && znak!='3' )
{
cout<<"Nie ma takiej opcji"<}

getch();
Instrukcja Switch
Gdy mamy do wyboru 3 opcje, funkcja if sprawdza się bardzo dobrze. Jeżeli jednak opcji jest dwadzieścia lub trzydzieści, wtedy korzystniejszym rozwiązaniem jest instrukcja switch. O ile pamiętam, to bardzo rzadko zdarzało mi się, abym musiał sprawdzić dwadzieścia warunków i korzystać z instrukcji switch, więc opowiemy sobie o niej dość pobieżnie.

Należy zapamiętać (albo wiedzieć, gdzie znaleść) schemat:

char znak;

cout<<"Wybierz opcje (a – e): "<znak=getch(); // mamy już zmienną znak

switch (znak) // w nawiasie nazwa zmiennej typu char
{ // otwieramy nawias klamrowy
case 'a': // gdy wybierzemy znak a
cout << "Opcja a" << endl; // to wykonają się te instrukcje
break; // aż dotąd

case 'b': // i znowu, tym razem, gdy wybierzemy b
cout << " Opcja b " <break;

case 'c': // gdy wybierzemy c itd
cout << " Opcja c " << endl;
break;

case 'd':
cout<< " Opcja d " << endl;
break;

case 'e':
cout << " Opcja e " << endl;
break;

default: // a tu, gdy nie wybierzemy a, b, c, d lub e
cout << "Nie ma takiej opcji!" << endl; // wykonają się te instrukcje
break; // aż dotąd
} // tu zamykamy nawias klamrowy, otwarty na początku.

getch();

UWAGA: Pomiędzy wyrażeniami case i break możemy umieścić dowolną ilość instrukcji, jednak nie są one umieszczane w nawiasach klamrowych.

Dla przykładu, program Menu v1.0 z użyciem switch:

char znak; // do tej zmiennej przypiszemy nasz wybór
const float pi=3.1415;
float wys_t, podst_t, prom_kola, boka_prost, bokb_prost, wynik;

cout<<"MENU"<cout<<"1 - Pole trojkata"<cout<<"2 - Pole kola"<cout<<"3 - Pole prostokata"<
znak=getch();

switch(znak)
{
case '1':// opcja 1
cout<<"Program obliczy pole trojkata"< cout<<"Podaj wysokosc: ";
cin>>wys_t;
cout<<"Podaj dlugosc podstawy: ";
cin>>podst_t;

if(wys_t>0 && podst_t>0)
{
wynik=(wys_t*podst_t)/2;
cout<<"Pole trojkata wynosi "< }
else
{
cout<<"Wymiary nie moga byc ujemne!"< }
break;

case '2':// opcja 2
cout<<"Program obliczy pole kola"< cout<<"Podaj promien: ";
cin>>prom_kola;

if(prom_kola>0)
{
wynik=prom_kola*prom_kola*pi;
cout<<"Pole kola wynosi "< }
else
{
cout<<"Wymiary nie moga byc ujemne!"< }
break;

case '3':// opcja 3
cout<<"Program obliczy pole postokata"< cout<<"Podaj dlugosc boku a: ";
cin>>boka_prost;
cout<<"Podaj dlugosc boku b: ";
cin>>bokb_prost;

if(boka_prost>0 && bokb_prost>0)
{
wynik=boka_prost*bokb_prost;
cout<<"Pole prostokata wynosi "< }
else
{
cout<<"Wymiary nie moga byc ujemne!"< }
break;

default:// Zadna opcja nie została wybrana
cout<<"Nie ma takiej opcji"<break;
}

getch();

Już od Ciebie zależy, czy będziesz korzystał z funkcji if czy z instrukcji switch. Radzę jednak korzystać w funkcji if, dzięki temu poćwiczysz sobie jej użycie.

Program Menu v1.0 wykonuje żądaną instrukcje, następnie kończy działanie. Już nie długo sprawimy, że program wykona żądaną instrukcję, a później powróci do głównego menu, aby można było kontynuować obliczenia lub cokolwiek innego. Pomoże nam w tym pętla WHILE i DO WHILE. (lekcja 6 )

---

Więcej na Praktyczny kurs CPP


Artykuł pochodzi z serwisu www.Artelis.pl

Praktyczny kurs C++ za darmo - pętla FOR

Praktyczny kurs C++ za darmo - pętla FOR

Autorem artykułu jest Frycz Modrzewski



Pętla ta pozwala na wykonanie pewnego bloku instrukcji określoną ilość razy. Można powiedzieć, że jest to ulepszona wersja pętli while i do while, gdyż przez odpowiednio skonstruowany warunek pomijamy kod, który musieliśmy napisać, aby otrzymać ten sam efekt przy użyciu while i do while.

Pętla ta pozwala na wykonanie pewnego bloku instrukcji określoną ilość razy. Można powiedzieć, że jest to ulepszona wersja pętli while i do while, gdyż przez odpowiednio skonstruowany warunek pomijamy kod, który musieliśmy napisać, aby otrzymać ten sam efekt przy użyciu while i do while. Doskonale nadaje się do zapisywania i odczytywania danych z tablic (lekcja 8), a tablice to niesamowicie przydatna zmienne.

Jak napisać warunek w pętli FOR



Warunek w tej pętli jest nieco inny niż w pętli while i do while oraz funkcji if. Wyobraź sobie sytuacje, że chcesz wypisać na ekran liczby całkowite od 1 do 10. Zaczynamy od 0, kończymy na 10, a po każdym kroku zwiększamy liczbę o 1. W języku C++ wyglądałoby to tak (jako zmienną używam i):

i=1; //zaczynam od 1
i<=11; //kończymy na 10,
i++ // zwiększamy zmienną o 1

Warunek ten umieszczamy:

for(warunek) //TUTAJ
{
// instrukcje
}

A dokładniej, po zdefiniowaniu zmiennej i możemy napisać:

int i;

for(i=1; i<=10; i++) // tak wpisujemy warunek
{
cout<}

getch();

Przeanalizuj wpisany warunek. Kolejność jest ważna. Najpierw od ilu zaczynamy, następnie na ilu kończymy i co ile zwiększamy lub zmniejszamy zmienną. Pętla poniżej wypisze liczby od 10 do 1.

int i;

for(i=10; i>=1; i--) // wypisze liczby od 10 do 1
{
cout<}

getch();

Aby wypisać liczby np. co 10, nie trzeba pisać i=i+10. Wystarczy i+=10. Kolejny skrót, który warto zapamiętać, gdyż znacznie ułatwi on pracę.

int i;

for(i=0; i<=100; i+=10) // tak wpisujemy warunek
{
cout<}

getch();

Granica wypisywania nie musi być narzucona. Możemy wczytać ją z klawiatury do zmiennej:

int i; // zmienna do zliczania
int granica; // tu zapiszemy naszą granicę

cout<<"Podaj granice wyliczania: "; // to już znamy
cin>>granica; // to też

for(i=0; i<=granica; i++) // używamy zmiennej zamiast liczby
{
cout<}

getch();

Dzięki pętli FOR znajdziemy z żądanego przedziału np.: liczby podzielne przez 3 lub przez 5:

int i; // zmienna do zliczania
int granica; // tu zapiszemy naszą granicę

cout<<"Podaj granice wyliczania: "; // to już znamy
cin>>granica; // to też

for(i=0; i<=granica; i++) // używamy zmiennej zamiast liczby
{
if((i%3)==0 || (i%5)==0) // warunek na podzielność liczby przez 3 lub 5.
{
cout< }
}

getch();

lub znaleść dzielniki zadanej liczby:

int i; // zmienna do zliczania
int liczba; // tu zapiszemy naszą liczbę

cout<<"Podaj liczbe: "; // to już znamy
cin>>liczba; // to też

for(i=1; i<=liczba; i++) // zliczamy od 1 do wartości liczba
{
if((liczba%i)==0) // warunek na podzielność podanej liczby przez aktualną wartość i.
{
cout< }
}

getch();

Zliczamy od 1 bo nie można dzielić przez 0. Robilibyśmy to, gdyby i początkowo miało wartość 0, a wtedy przy sprawdzeniu warunku na podzielność program odmówiłby posłuszeństwa. Kolejnym, jednym z wielu, zastosowaniem jest obliczanie silni (pominiemy wartość 0):

int i; // zmienna do zliczania
int liczba; // tu zapiszemy naszą liczbę
long long int silnia=1; //a tu – wartość silni, początkowo 1
// Uwaga – zmodyfikowany typ zmiennej

cout<<"Podaj liczbe wieksza od 0: "; // to już znamy
cin>>liczba; // to też

for(i=1; i<=liczba; i++) // zliczamy od 1 do wartości liczba
{
silnia=silnia*i; // mnożymy aktualną wartość silnia przez i
}

cout<<"Silnia z liczby "<
getch();

Wartość silni początkowo wynosi 1.

UWAGA: wprowadziłem typ zmiennej long long int. To wciąż jest stary, dobry i sprawdzony int tylko mogący pomieścić zdecydowanie większe liczby. Zwykły int poprawnie podaje silnie z liczby 16. Z 17 silnia jest ujemna. Natomiast zmodyfikowaniu typu spokojnie możemy obliczać silnie nawet z 25.

Wypisywanie liczb podzielnych przez 4 lub 7, obliczanie silni, średniej – to są problemy, którymi masowo zamęcza się studentów pierwszego roku informatyki i nie tylko. Ja pokazałem najprostsze algorytmy, jedynie do przeanalizowania, bo na razie nie ma potrzeby uczenia się ich. Najszersze zastosowanie pętli FOR już w następnej części (lekcja 8)

---

Więcej na Praktyczny kurs CPP


Artykuł pochodzi z serwisu www.Artelis.pl

Praktyczny kurs C++ za darmo - Tablice

Praktyczny kurs C++ za darmo - Tablice

Autorem artykułu jest Frycz Modrzewski



Tablice mogą przechowywać więcej niż jedną "pojedyńczą" zmienną określonego typu np int, float czy char. Są przydatne gdy zachodzi konieczność zapisania dużej ilosci danych. Indeksowanie poszczególnych jej elementów zapewnia szybki dostęp do dowolnego elementu tablicy, a pisanie programów jest bardziej efektywne

A cóż to za dziwny twór? Co my z tych tablic będziemy odczytywać? Aby uzyskać wizję na temat tablic, posłużę się przykładem: napisz program, który pobierze 5 liczb z klawiatury. Następnie wypisze je w kolejności podania, a później w odwrotnej. Nie możemy tego zrealizować poprzez wypisywanie liczb na bieżąco przy użyciu jednej zmiennej. Trzeba zdefiniować 5 zmiennych.
int liczba1, liczba2, liczba3, liczba4, liczba5; // tu zapiszemy wartości tych liczb
int i; // zmienna do zliczania

cout<<"Podaj liczbe 1: "; // pobieramy liczby
cin>>liczba1;
cout<<"Podaj liczbe 2: ";
cin>>liczba2;
cout<<"Podaj liczbe 3: ";
cin>>liczba3;
cout<<"Podaj liczbe4: ";
cin>>liczba4;
cout<<"Podaj liczbe 5: ";
cin>>liczba5;
cout<cout<
getch();

Program działa jak najbardziej poprawnie. Sytuacja znacznie się zagęści, jeśli zajdzie konieczność wczytania i wypisania w ten sposób 10 liczb albo 20. O 30 można zapomnieć. Zastanówmy się, co stanowi kłopot. Po pierwsze to konieczność definiowania takiej ilości zmiennych jak ilość liczb do wypisania. Po drugie, niewygodny wypis tych zmiennych. Jednak z pomocą przychodzą tablice. Jest to taka zmienna, do której można zapisać dowolną ilość innych zmiennych.

UWAGA: zmienne w tablicy muszą być tego samego typu.

W dodatku, każda zmienna w tablicy posiada swój indeks, dzięki któremu odczytywanie i wypisywanie, zapisywanie, sortowanie oraz przeszukiwanie jest znacznie ułatwione.
Definicja tablicy

Tablicę definiujemy podobnie jak inną zmienną. Podajemy typ, nazwę oraz rozmiar tablicy w nawiasach kwadratowych. Typ nazwa[rozmiar]. Poniżej definicja tablicy typu float o nazwie pomiary, mogąca pomieścić 20 pomiarów.
float pomiary[20]; // tu zapiszemy zmienne typu float

UWAGA: rozmiar tablicy musi być określony w jej definicji. Nie można rozmiaru tablicy określić poprzez zmienną.

Ten program na pewno nie będzie działał:
int rozmiar;
float pomiary[20];
float wyniki[rozmiar]; // BŁĄD !!!

cout<<"Podaj rozmiar tablicy: ";
cin>>rozmiar;

getch();

UWAGA !!! Numerowanie tablicy rozpoczyna się od 0 !!! UWAGA

Wniosek: jeżeli w nawiasie klamrowym wpiszemy 3 to znaczy, że w tablicy zapiszemy 4 zmienne. Ich indeksy to 0, 1, 2 i 3.

Mając już zdefiniowaną tablice, możemy zapisać do niej dane. Aby zapisać zmienną do miejsca o indeksie 0 należy:
pomiary[0]=3.2;

w nawiasie klamrowym podać numer indeksu, w tym przypadku 0 i przypisać zmienną. Zasady użycia tablicy, jak widać, podobne do zasad użycia innych zmiennych. Jedyną różnicą jest konieczność podania numeru indeksu w nawiasie. Zapiszmy jeszcze kilka pomiarów.
float pomiary[20];

pomiary[0]=3.2;

cout<<"Podaj pomiar nr 2: ";
cin>>pomiary[1];
cout<<"Podaj pomiar nr 3: ";
cin>>pomiary[2];
cout<<"Podaj pomiar nr 4: ";
cin>>pomiary[3];

cout<<"Pomiary: "<
getch();

Skoro jedyną zmienną podczas zapisywania tablicy jest indeks, więc bez problemu możemy użyć pętli for.
float pomiary[20]; // tablica
int i;

for(i=0; i<=4; i++)
{
cout<<"Podaj pomiar nr "< cin>>pomiary[i]; // zapisujemy element tablicy nr i
}

// mamy już pomiary zapisane w tablicy
// teraz je wypiszemy

cout<<"Pomiary: ";

for(i=0; i<=4; i++)
{
cout<}

getch();

Aby określić, ile pomiarów chcemy podać, wystarczy pobrać zmienną, określającą ilość pomiarów i wstawić do warunku pętli for. Nie może to być jednak liczba większa od rozmiaru tablicy, podanego na początku.
int ilosc; // ilość pomiarów
float pomiary[20]; // tablica z pomiarami
int i;

cout<<"Podaj ilosc pomiarow: ";
cin>>ilosc;

for(i=0; i{
cout<<"Pomiar nr "< cin>>pomiary[i];
}

cout<<"Podane pomiary: "; // wypisujemy pomiary

for(i=0; i{
cout<}

getch();

Napiszemy program, który pobierze ilość pomiarów, pomiary, wypisze je, oraz obliczy średnią arytmetyczną.
int ilosc; // ilość pomiarów
float pomiary[20]; // tablica z pomiarami
float suma=0; // suma potrzebna o obliczenia średniej
float srednia; // średnia ;-)
int i;

cout<<"Podaj ilosc pomiarow: ";
cin>>ilosc;

for(i=0; i{
cout<<"Pomiar nr "< cin>>pomiary[i];
suma=suma+pomiary[i]; // obliczamy sumę
}

cout<<"Podane pomiary: "; // wypisujemy pomiary

for(i=0; i{
cout<}

srednia=suma/ilosc; // obliczamy średnią
cout<
getch();

Jeszcze jeden mały programik, który pomoże nam w stworzeniu czegoś większego i bardziej użytecznego. Program pobierze pomiary i znajdzie największą wartość. Zdefiniujemy zmienną max. Początkowo przypiszemy jej wartość pierwszego pomiaru. Jeżeli kolejny pomiar okaże się większy to za max podstawimy jego wartość.
float pomiary[20];
float max;
int i, ilosc;

cout<<"Podaj ilosc pomiarow: ";
cin>>ilosc;

for(i=0; i{
cout<<"Pomiar nr "< cin>>pomiary[i];
}

max=pomiary[0]; //ustalamy wartość początkową

cout<<"Podane pomiary: "; // wypisujemy pomiary

for(i=0; i{
cout< if(max {
max=pomiary[i]; // to ustawiamy ją jako moaksymalną
}
}

cout<
getch();

Ćwiczenie: zabezpiecz wszystkie powyższe programy tak, aby można było podać tylko dodatnią ilość pomiarów.

Możemy zabrać się w końcu za coś konkretnego. Stworzymy program Pomiary v1.0, który będzie pobierał ilość pomiarów oraz pomiary i na tej podstawie wyświetlał je, obliczał średnią oraz podawał wartość najmniejszą i największą. Oczywiście program będzie posiadał menu, umożliwiające wielokrotne podanie pomiarów.
float pomiary[20]; // potrzebne zmienne
float suma=0, srednia, max, min;
int i, ilosc;
char znak;

cout<<"MENU"<cout<<"1- Podaj nowe pomiary"<cout<<"2 - Zakoncz"<
znak=getch(); // czekamy na dokonanie wyboru
while(znak!='2') // jeżeli to nie 2 czyli nie kończymy to
{
if(znak=='1') // jeżeli nie 1 to może 2, Jeśli tak to
{
cout<<"Podaj ilosc pomairow (1 – 20): "; // prosimy o podanie ilości
cin>>ilosc;
while(ilosc<=0 || ilosc>20) // jeżeli ilość nie spełnia warunków
{
cout<<"Ilosc pomiarow musi byc wieksza od 0 i mniejsza od 21"< cout<<"Podaj ilosc pomairow (1 – 20): "; // prosimy ponownie
cin>>ilosc;
}

for(i=0; i {
cout<<"Pomiar nr "< cin>>pomiary[i];
}

max=pomiary[0]; // ustawiamy wartości początkowe
min=pomiary[0];

cout< for(i=0; i {
cout< suma=suma+pomiary[i]; // liczymy sumę
if(pomiary[i]>max) // sprawdzamy wartość max
{
max=pomiary[i]; // podstawiamy
}
if(pomiary[i] min) // sprawdzamy wartość min
{
min=pomiary[i]; // podstawiamy
}
}
srednia=suma/ilosc; // obliczamy średnią

cout< cout<<"Wartosc minimalna: "< cout<<"Wartosc srednia: "< }
else // jeżeli to nie 1 ani 2
{
cout<<"Nie ma tekiej opcji!"< }
suma=0; // WAŻNE: zerujemy sumę
cout<<"Wybierz opcje: "<znak=getch();
}

W końcu jakiś konkret ;-)
Wczytywanie wyrazów
Umiejętność wczytywania wyrazów pozwoli nam na stworzenie małej bazy danych, w której będziemy przechowywali np.: numery telefonów, adresy e-mail, adresy, nazwiska, dane pracowników. Po prosu cokolwiek. Ja w swojej pierwszej bazie przechowywałem nazwy monet, rok bicia, stop, cenę kupna i sprzedaży.

Aby móc wczytać wyraz, należy zdefiniować tablicę typu char:
char imie[20];

Wczytanie imienia do tablicy imie jest bardzo proste.
cout<<"Podaj imie: ";
cin>>imie;

Wczytujemy je tak jak do normalnej zmiennej. Wadą jest to, że we wczytanym wyrazie nie może być spacji. Przy wypisaniu imienia:
cout<
spacja zostanie obcięta i wszystko co było napisane za nią. Spróbuj jako imie podać Tomasz Mateusz to przekonasz się jak to działa. Co więcej, nie można porównać ze sobą dwóch tablic z wyrazami. Wpisz takie same imiona:
cout<<"Podaj pierwsze imie: ";
cin>>imie1;
cout<<"Podaj drugie imie: ";
cin>>imie2;

if(imie1==imie2)
{
cout<<"mozna porownac dwa wyrazy";
}
else
{
cout<<"Nie mozna porownac dwoch wyrazow";
}

getch();

Ale za to można porównywać litera po literze zmienne typu char zapisane w tablicy. Trzeba znaleźć ilość zapisanych znaków. Można to zrobić, wykorzystując fakt, że przy wypisie spacja zostaje obcięta. Dokładniej, spacja w tablicy oznaczana jest jako \0 (kreska ukośna i zero), czyli koniec ciągu znaków. Nawet jeśli nie damy spacji na końcu, to i tak pojawi się tam znak \0, dlatego możemy zliczać ilość znaków aż do napotkania znaku \0. Następnie, mając już długość (wystarczy długość jednego wyrazu), należy użyć pętli for i porównać odpowiednie znaki ze sobą.

Program obliczający długość wyrazu
char wyraz[20]; // wyraz, którego długość będziemy liczyć
int i=0; // zmienna do zliczania ilości znaków
int n=0; // ilość znaków

cout<<"Podaj wyraz: "; // wczytujemy wyraz
cin>>wyraz;

while(wyraz[i]!='\0') // jeżeli nie natrafiamy na pusty znak
{
n++; // to zwiększamy n o jeden
i++; // oraz i o jeden
}

cout<<"Dlugosc wyrazu wynosi "<
getch();

Mając długość wyrazu, korzystamy z pętli for i porównujemy dwa wyrazy. Załóżmy, że mamy już zdefiniowane i wczytanie dwa wyrazy: wyraz1[20] i wyraz2[20], długość n oraz zmienną stanu stan, określającą czy dwa wyrazy są takie same. Początkowa wartość stan wynosi 0. Podaję tylko fragment kodu:
for(i=0; i{
if(wyraz1[i]!=wyraz2[i]) // gdy litery się nie zgadzają
{
stan=1; // zmiennej stan przypisujemy wartość 1
}
}

if(stan==0) // jeżeli stan ma wartość 0 to:
{
cout<<"Wyrazy sa takie same"<}
else // jeżeli nie to
{
cout<<"Wyrazy sa rozne"<}

Połączmy dwa powyższe kody w jeden program, stwierdzający czy dla wyrazy są równe.
char wyraz1[20], wyraz2[20]; // wyraz, którego długość będziemy liczyć
int i=0; // zmienna do zliczania ilości znaków
int n=0; // ilość znaków
int stan=0; // zmienna, która mówi czy wyrazy są takie same

cout<<"Podaj wyraz nr 1: "; // wczytujemy wyraz 1
cin>>wyraz1;
cout<<"Podaj wyraz nr 2: "; // wczytujemy wyraz 2
cin>>wyraz2;

while(wyraz1[i]!='\0') // jeżeli nie natrafiamy na pusty znak
{
n++; // to zwiększamy n o jeden
i++; // oraz n o jeden
}

// mamy już długość wyrazu 1 w zmiennej n

for(i=0; i{
if(wyraz1[i]!=wyraz2[i]) // gdy jakaś literka się nie zgadza
{
stan=1; // zmieniamy wartość zmiennej stan
}
}

if(stan==0) // sprawdzamy wartość zmienej stan
{
cout<<"Wyrazy sa takie same"<}
else
{
cout<<"Wyrazy sa rozne"<}

getch();

Program porównujący dwa wyrazy ze sobą może posłużyć do stworzenia większego programu, zabezpieczanego hasłem o dowolnej liczbie znaków. Wystarczy zadeklarować odpowiednio dużą tablicę. Stworzenie tego programu pozostawiam Tobie. Podpowiem, że do tablicy typu char nie można podstawić od razu całego wyrazu.
char wyraz[20];

wyraz="jankowalski"; // to się nie uda !
cout<
getch();

Również trzeba zapisać każdy znak po kolei i na końcu postawić znak \0. Bardzo uciążliwe, ale cóż zrobić…
char wyraz[20];

wyraz[0]='j';
wyraz[1]='a';
wyraz[2]='n';
wyraz[3]='\0';

cout<
getch();

Wyobraź sobie sytuację: Chcąc zapisać kilka pomiarów, które są liczbami, używamy tablicy. W drugiej tablicy możemy zapisać dokładność pomiaru – to też liczba. Również do każdego pomiaru dobrze będzie wpisać nazwisko osoby, dokonującej pomiaru, czyli wszystkie nazwiska można umieścić w trzeciej tablicy. Problem w tym, że jedno nazwisko to już tablica typu char, a my chcemy wszystkie tablice z nazwiskami umieścić w większej tablicy. Jest to możliwe z użyciem macierzy, czyli tablic wielowymiarowych. O tym już w następnej części. (lekcja 9).

---

Więcej na Praktyczny kurs CPP


Artykuł pochodzi z serwisu www.Artelis.pl