Wykład 1.sxw

Podobne dokumenty
1 Podstawy c++ w pigułce.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

1 Podstawy c++ w pigułce.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

2 Przygotował: mgr inż. Maciej Lasota

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Języki i metodyka programowania. Wprowadzenie do języka C

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Zmienne, stałe i operatory

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Podstawy Programowania Podstawowa składnia języka C++

Programowanie strukturalne i obiektowe

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Proste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Część 4 życie programu

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Wstęp do programowania. Wykład 1

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania - 1

Podstawy programowania skrót z wykładów:

Wstęp do Programowania, laboratorium 02

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

Programowanie strukturalne język C - wprowadzenie

Podstawy Programowania

Wprowadzenie do języka Java

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Podstawy programowania (1)

4. Funkcje. Przykłady

Programowanie w języku C++ Grażyna Koba

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wstęp do informatyki- wykład 3 Pierwszy program w C++ Wyprowadzanie danych Deklaracja zmiennych

Wstęp do informatyki- wykład 7

Paostwowa Wyższa Szkoła Zawodowa w Płocku Dariusz Wardowski

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Powtórka algorytmów. Wprowadzenie do języka Java.

Programowanie - wykład 4

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Powtórka algorytmów. Wprowadzenie do języka Java.

Proces tworzenia programu:

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Metodyki i Techniki Programowania MECHANIZM POWSTAWANIA PROGRAMU W JĘZYKU C PODSTAWOWE POJĘCIA

Wstęp do informatyki- wykład 11 Funkcje

Programowanie strukturalne i obiektowe. Funkcje

INFORMATYKA Studia Niestacjonarne Elektrotechnika

1. Wypisywanie danych

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Wstęp do programowania

Każdy z nich posiada swoje parametry. W przypadku silnika może to być moc lub pojemność, w przypadku skrzyni biegów można mówić o skrzyni

Elementarne wiadomości o języku C

Wstęp do informatyki- wykład 9 Funkcje

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki programowania zasady ich tworzenia

Języki programowania obiektowego Nieobiektowe elementy języka C++

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład 5: Klasy cz. 3

Podstawy Programowania. Wykład 1

7. Pętle for. Przykłady

Podstawy programowania C. dr. Krystyna Łapin

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

KURS C/C++ WYKŁAD 1. Pierwszy program

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

Podstawy programowania w C++

lekcja 8a Gry komputerowe MasterMind

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Wykład 1. Proponowany termin kolokwium zaliczeniowego ostatni wykład w semestrze letnim

WYKŁAD 1 - KONSPEKT. Program wykładu:

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania w C++

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Język C++ zajęcia nr 1

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

I - Microsoft Visual Studio C++

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Transkrypt:

Literatura 1. B. W. Kernighan, D. M. Ritchie Język ANSI C 2. B. Stroustrup Język C++ Koniecznie nowsze wydania np. WNT 2002. Dodatkowo: 3. K. Barteczko Praktyczne wprowadzenie do programowania obiektowego w języku C++ Lupus, Warszawa 1993. Książka starsza, ale jako uzupełnienie może być pomocna. 4. J. Grębosz Symfonia C++, Pasja C++ Edition 2000 Polecana przez wielu czytelników. 5. S. Meyers Język C++ Bardziej Efektywny 6. R. B. Murray C++ Strategia i taktyka Programowanie Obiektowe Narzuca nowy styl programowania który jest bardziej wymagający dla projektantów bibliotek, natomiast pozwala użytkownikom tzn. programistom korzystającym z tych bibliotek pracować łatwiej i efektywniej. Język C++ jest językiem programowania opartym o język C i wspomagającym ideę (paradygmat) programowania obiektowego i zawierający także elementy wspomagające tzw. programowanie generyczne (tzn. korzystające ze zautomatyzowanego tworzenia pewnych części oprogramowania). Są w istocie dwa oddzielne etapy nauki języka C++ tj. nauka składni oraz nauka sposobów tworzenia projektów obiektowych. C++ ma mnóstwo możliwości nie trzeba jednak opanować wszystkich by móc efektywnie korzystać z języka. Istnieją również zasadniczo dwie koncepcje podejścia do programowania obiektowego, a w szczególności programowania w języku C++. Pierwsza mówi, że należy zacząć od początku uczyć się projektowania obiektowego i następnie pisać programy korzystając wyłącznie z podejścia obiektowego, natomiast druga stwierdza, że do programowania obiektowego należy podchodzić etapami, używając C++ najpierw jako ulepszonego C, przechodząc do tzw. abstrakcji danych, a następnie do pełnego programowania obiektowego. Podejście drugie wydaje się być bardziej odpowiednim uwzględniając następujące czynniki: Każdy program w C jest jednocześnie programem w C++ ( z pewnymi wyjątkami). Praca w C++ narzuca proces projektowania. Nie należy używać wszystkich możliwości języka naraz. Łatwiej używać klas niż je budować (klasa jest specyficznym typem danych opisującą tzw. obiekty). Szczególnie łatwe jest korzystanie z dostarczonych z kompilatorem bibliotek obiektowych. Języki wysokiego poziomu wymagają więcej pracy komputera. Tworzenie bibliotek to nie zabawa. W szczególności po roku 1997 oficjalna wersja C++ uległa tak daleko idącym zmianom ze względu na ogromny postęp w projektowaniu standardowej biblioteki tzw. wzorców (STL), że współczesne programy C++ mało przypominają programy w C. Jednakże wielu programistów piszących w C++ ciągle używa konstrukcji zaczerpniętych bezpośrednio z klasycznego C, a które są w dalszym ciągu dozwolone w C++. Dlatego właściwym wydaje się rozpoczęcie wykładów z C++ od przybliżenia klasycznego języka C. A w dodatku w pewnych systemach Unix'owych w dalszym ciągu standardowo są instalowane kompilatory C, a nie C++. A poza tym dostępne są kody źródłowe do tego systemu. Kody te w dużej części są napisane w C. Budowa Programu w C/C++ Każdy program składa się z tzw. funkcji głównej, która wywołuje inne funkcje bądź realizuje instrukcje języka, stąd najprostszy program w języku C i C++ ma następującą postać (obok równoważna postać tego programu w języku Pascal): Wykład 1.sxw 04.10.2004 1

C/C++ Begin End. Pascal Ogólna definicja programu pochodząca z oficjalnego raportu języka C++: Program jest zbiorem plików połączonych ze sobą. Plik składa się z ciągu deklaracji W szczególności: funkcje wejścia-wyjścia nie są częścią języka C (tak ja są nią instrukcje write i read dla Pascal a) są one natomiast dostarczane z bibliotekami stanowiącymi integralną część standardu języka zarówno C jak i C++. Zastosowanie takiej biblioteki wymaga uwzględnienia deklaracji danej funkcji i zmiennych używanych w danej bibliotece, a dokonuje się tego przez dołączenie tzw. pliku nagłówkowego zawierającego zestaw tych deklaracji. Stąd w typowym tekście programu zawierającego funkcję main() występuje również szereg dyrektyw (#include) włączających do procesu kompilacji pliki nagłówkowe. Program używający standardowej funkcji wyjścia printf wygląda następująco. #include <stdio.h> int main() printf( Dowolny łańcuch znakowy ); return 0; Na przykładzie tego programu można zauważyć, że: Na początku dołączono w nim dyrektywą #include plik nagłówkowy stdio.h, plik ten jest plikiem tekstowym i zawiera deklarację licznych zmiennych i funkcji min. funkcji main() Należy zwrócić uwagę na to, że w odróżnieniu od Pascala łańcuchy tekstowe ujęte są w cudzysłowy ( ) a nie w apostrofy ( ) Instrukcje kończą się średnikiem. printf jest funkcją. W języku C nie ma procedur w sensie języka Pascal, są funkcje. Funkcje zwracają w miejsce swojego wywołania jakąś wartość, ponieważ main() jest funkcją języka C więc spełnia wszystkie warunki dla takich funkcji min. zwraca wartość (wartość ta może być np. testowana przez system operacyjny, co może być zastosowane w tzw. plikach wsadowych lub skryptach systemowych). W naszym przypadku wartością tą jest 0 (instrukcją kończącą wykonywanie funkcji i przekazującą w miejsce jej wywołania wartości jest return ). Typ zwracanej wartości jest podany w trakcie deklaracji funkcji, w ostatnim przypadku mówi o tym napis int przed funkcją main(). W przykładzie prezentującym najprostszy program w C, funkcja main() była zadeklarowana z atrybutem void co oznaczało, że funkcja ta nie zwraca żadnej wartości. Funkcje takie można traktować jako równoważniki Pascal owskich procedur. Nawiasem mówiąc funkcja printf() również zwraca pewną wartość, tzn. w przypadku sukcesu zwraca ilość bajtów przekazanych na wyjście (czytaj: ekran), w przypadku niepowodzenia (tzn. wydarzyło się coś nieprzewidzianego co uniemożliwiło wypisanie komunikatu) zwraca tzw. znak specjalny, w tym przypadku oznaczany on jest za pomocą skrótu EOF. Kompilatory języka C / C++ rozpoznają wielkość liter (ang. Case Sensitive) tzn. napis main jest różny od Main i program: void Main() nie skompiluje się. Wykład 1.sxw 04.10.2004 2

w języku C++ częściej w celu wyprowadzenia danych na konsolę stosuje się bibliotekę strumieniową, której definicje zawarte są w pliku nagłówkowym <iostream.h>. Stąd wersja ostatniego z programów napisana przy użyciu tej biblioteki miała by postać: #include <iostream.h> int main() cout << Dowolny łańcuch znakowy ; return 0; w powyższym programie cout jest to tzw. standardowy strumień wyjścia, który utożsamiany jest z ekranem. Znaki << oznaczają operator skierowania strumienia co można z grubsza interpretować jako wysłanie tego co po prawej stronie do strumienia cout (czyli de facto na ekran). Tak naprawdę użycie operatora << jest tutaj jedynym widocznym na pierwszy rzut oka rozszerzeniem C zaimplementowanym (czyli zrealizowanym) w języku C++ i obrazuje operację tzw. przeciążania operatora tzn. nadania operatorowi nowego znaczenia zależnego od rodzaju danych dla jakich się go stosuje. W języku C << jest operatorem przesuwania bitowego, o czym przekonamy się w przyszłości. Tutaj w bibliotece strumieniowej C++ operator ten został przedefiniowany. Stosowanie wejścia i wyjścia w stylu C (np. funkcja printf() ) czy też C++ jest raczej kwestią gustu. Dla łańcuchów tekstowych zresztą nie ma większych różnic w obu sposobach. Różnicę widać dopiero wtedy gdy na wyjście wysyła się dane różnych typów. Dzięki rozszerzeniu obiektowemu operatory zdefiniowane w bibliotece iostream same dostosowują do typu zmiennych typ wyjścia, tzn, np. liczby typu całkowitego (int) zamieniają w ich odpowiednik łańcuchowy (czyli napis zrozumiały dla człowieka). Podobnie jak Pascal język C jest językiem ze ścisła typizacją, tzn. dla wszystkich zmiennych należy określić zadeklarować ich typ (tzn. rodzaj danych jakie będą przechowywały). Z tym, że w przeciwieństwie do Pascala nie ma wyróżnionej sekcji, w której definiuje się dane. W ANSI C deklaracje powinny pojawić się na początku bloku, do którego ogranicza się zasięg, tych deklaracji. Np. zmienne globalne (tzn. widoczne we wszystkich funkcjach programu), muszą być zadeklarowane na zewnątrz funkcji main(). W przypadku C++ jedynym wymaganiem jest to aby deklaracja zmiennej pojawiła się przed jej użyciem. Przykładowe deklaracje: Typy całkowite: int i; // i jest zadeklarowana jako zmienna typu całkowitego int k; // podobnie k long int z ; // obie poniższe deklaracje tzw. zmiennej long z; //całkowitej długiej są poprawne int j,z; int w = 3; Typy rzeczywiste: float r; double d; long double z; Typ znakowy: // deklaracje dwóch zmiennych całkowitych // deklaracja połączona z inicjalizacją tzn. nadaniem // wartości ( w tym przypadku zmiennej w została // przypisana liczba 3). // zmienna rzeczywista pojedynczej precyzji; // zmienna rzeczywista podwójnej precyzji. //zmienna rzeczywista rozszerzonej podwójnej precyzji. Wykład 1.sxw 04.10.2004 3

char a = a ; // UWAGA!!! w przeciwieństwie do Pascala apostrofy // oznaczają pojedynczy znak, natomiast łańcuch musi być // ujmowany w cudzysłowy zmienna typu char jest również traktowana jako liczba całkowita o długości 1 bajta tzn (8 bitów). char b = 17; // można napisać ciąg deklaracji i instrukcji: (int i; char b=3; i = 5 + b), // po których i przyjmie wartość 8. Zastosowanie deklaracji zmiennych, instrukcji iteracyjnych i arytmetycznych na przykładzie programu Stopa (przeliczającego odległość wyrażoną w stopach na odległość w metrach) Przykłady z dwoma sposobami wejścia i wyjścia. Program przy użyciu bibliotek C++ Klasyczny C /* Program przelicza odległość wyrażoną w stopach na odległość wyrażoną w metrach dla odległości S= 0, 20, 40... 300 stóp. Odległości te przelicza się według następującego wzoru M = S*0,3048 */ #include <iostream.h> int Metry, GORNA; int KROK = 20; // inicjacja i deklaracja zmiennej int DOLNA = 0; GORNA = 300; int Stopy = DOLNA; while (Stopy <=GORNA) Metry =Stopy*3048/10000; cout << Stopy << \t << Metry << n ; Stopy = Stopy + KROK; // ****** koniec funkcji main(); #include <stdio.h> int Metry, GORNA; int KROK = 20; // inicjacja i deklaracja zmiennej int DOLNA = 0; GORNA = 300; int Stopy = DOLNA; while (Stopy <=GORNA) Metry = Stopy*3048/10000 ; printf( %d \t %d \n, Stopy, Metry); Stopy = Stopy + KROK; // ****** koniec funkcji main(); Uwagi do pierwszego programu. Chociaż w prawej kolumnie przykładowego programu, została podana informacja, że jest to program w klasycznym C, to jednak ponieważ przypisanie GORNA = 300 znajduje się przed deklaracją (int fahr = DOLNA) to program ten w klasycznym kompilatorze C nie skompiluje się. Zgodnie z tym co było powiedziane wcześniej w klasycznym C, wszystkie deklaracje muszą znaleźć się na początku bloku w którym obowiązują, co w naszym przypadku oznacza początek funkcji głównej (main()). Poprawna kolejność w tym przypadku to: int Stopy = DOLNA; GORNA = 300; Aby program był zgodny z klasycznym C nie może mieć również komentarzy zaczynających się od dwóch ukośników ( backslash-y ) //. Jedynym dozwolonym komentarzem jest blok ujęty w następujące sekwencje ograniczające: /* */. Wykład 1.sxw 04.10.2004 4

W rozważanym programie wyjaśnienia wymaga instrukcja while(), której postać można ogólnie zapisać jako: while(wyrażenie) instrukcja; Jest to instrukcja sterująca iteracyjna, czyli służy do zapisywania powtarzających się instrukcji, w których musi ulegać zmianie co najmniej jedna ze zmiennych tj. tzw. zmienna sterująca, której stan badany jest w warunku zakończenia iteracji, w przeciwnym wypadku mamy do czynienia z pętlą nieskończoną. Argumentem instrukcji while jest wyrażenie (warunek logiczny). Funkcja while() powtarza bezpośrednio po niej następującą instrukcję lub grupę instrukcji ujętą w nawiasy klamrowe, tak długo, jak długo warunek logiczny będący jej argumentem pozostaje prawdą. W naszym przypadku blok instrukcji ujęty w nawiasy klamrowe a znajdujący się bezpośrednio za instrukcją while(), będzie powtarzany tak długo, jak długo zmienna Stopy pozostaje mniejsza bądź równa zmiennej GORNA. Zmienna Stopy jest tu zmienną sterującą. Jej wartość w każdym kroku pętli ulega zwiększeniu o wartość zmiennej KROK. Funkcja printf() pochodząca ze standardowej biblioteki języka C, jest powszechnie używana do formatowanego wyjścia (tj. po prostu pisania na ekranie) w środowisku znakowym. Jej deklaracja znajduje się w pliku nagłówkowym <stdio.h>. Zapis z nawiasami ostrymi mówi kompilatorowi, że plik nagłówkowy znajduje się w standardowym (tj. znanym kompilatorowi ) katalogu z plikami nagłówkowymi i kompilator tam właśnie będzie go szukał. W przypadku tworzenia własnych plików nagłówkowych w dyrektywie #include należy wraz z nazwą pliku podać ścieżkę dostępu do niego ujętą w cudzysłowy, np. w systemie plikowym wywodzącym się z DOS-a zapis taki wyglądał by następująco: #include C:\\Katalog\\nazwa_pliku.h. Warto zauważyć, że po tak zwanych dyrektywach preprocesora (do których należy #include) nie stawiamy średnika. Podwójny znak \\ jest potrzebny ze względu na specyficzne znaczenie pojedynczego znaku \ w C. Liczba argumentów funkcji printf() jest dowolna, z tym, że pierwszym argumentem musi być tzw. łańcuch formatujący (ciąg znaków), który zawiera napis mający ukazać się na wyjściu. W łańcuchu tym, w miejscach w których należy wstawić określone zmienne mające pojawić się na wyjściu, mogą znajdować się tzw. specyfikacje przekształceń składające się ze znaku % oraz litery określającej typ wstawianych zmiennych (lub stałych). Zmienne te, powinny być następnymi argumentami funkcji printf(), w takiej kolejności w jakiej pojawiają się w łańcuchu formatującym. Np. skutkiem wykonania instrukcji printf( Wynik dzielenia %d przez %d jest równy %f \n,a,b,c); przy założeniu że a, b są zmiennymi typu int, natomiast c zmienną typu float wynoszącymi odpowiednio 3, 2, 1.5; otrzymamy na wyjściu napis: Wynik podzielenia 3 przez 2 wynosi 1.500000 specyfikacje przekształceń mają domyślne formatowanie (tzn. sposób wyświetlania), którym można sterować np. w przypadku zmiennych rzeczywistych ciąg znaków %6.2f oznacza, że w tym miejscu spodziewana jest liczba zmiennoprzecinkowa, która ma być zapisana w polu o długości (szerokości) co najmniej sześciu znaków i być wypisaną z dokładnością do 2 liczb po przecinku. Najpopularniejsze specyfikatory przekształceń: %d, %i %x, %X typy całkowite wyjście w zapisie dziesiętnym typy całkowite wyjście w zapisie szesnastkowym Wykład 1.sxw 04.10.2004 5

%f, %g, %e, %E, %G typy zmiennoprzecinkowe %c pojedynczy znak %s łańcuch tekstowy W każdym łańcuch tekstowym, mogą znaleźć się również tak zwane znaki specjalne, zapis ich zaczyna się od znaku \ po którym następuje odpowiednia litera; najpopularniejsze znaki specjalne: \n przejście do następnego wiersza \t tabulator \ wypisuje znak apostrofu, który normalnie należy do znaków specjalnych \ wypisuje znak cudzysłów, który normalnie należy do znaków specjalnych \\ wypisuje znak ukośnik odwrotny (ang. backslash), który normalnie należy do znaków specjalnych \? wypisuje znak zapytania. \xh wypisuje znak o kodzie ASCII zapisanym w miejscu H za pomocą cyfr szesnastkowych np. \x0f wypisze znak o kodzie 16 (szesnastkowo 0F) \Oooo wypisuje znak o kodzie ASCII zapisanym za pomocą 3 cyfr w notacji ósemkowej Wykonanie przykładowego programu w przedstawionej wersji, dostarczy jedynie przybliżonych wyników. Dzieje się tak ponieważ wszystkie zmienne były zadeklarowane jako zmienne całkowite (int), wówczas wyniki działań arytmetycznych będących liczbami niecałkowitymi są pozbawiane części ułamkowej. Rozwiązaniem jest zadeklarowanie typu wyniku (zmiennej Metry jako zmiennej typu np. float oraz użycie w wyrażeniu literałów liczbowych typu zmiennoprzecinkowego (czyli przedstawień znakowych, napisów np. 1.34 ), co w praktyce polega na dopisaniu części ułamkowej do liczb wchodzących w skład wyrażenia arytmetycznego. (czyli Stopy*3048.0/10000.0 albo po prostu Stopy*0.3048) Język C znany jest z bardzo zwięzłego zapisu. Podobnie jak i inne języki programowania posiada również różnego rodzaju instrukcje iteracyjne (czyli organizujące tzw. pętle ). Obie te cechy języka prezentuje poniższy program: Program przy użyciu bibliotek C++ Klasyczny C /* Program przelicza odległość wyrażoną w stopach na odległość wyrażoną w metrach dla odległości S= 0, 20, 40... 300 stóp; wersja z instrukcją for() */ #include <iostream.h> for(int S=0 ; S<=300; S = S+20) cout<< S << \t << S*3048.0/10000 << \n ; // ****** koniec funkcji main(); #include <stdio.h> int S; for (S = 0; S <=300;S = S + 20) printf( %3d %6.1f\n, S, S*0.3048); // ****** koniec funkcji main(); Wykład 1.sxw 04.10.2004 6

Programy zapisane w dialektach C++ i C różnią się w tym przypadku nie tylko zastosowanymi bibliotecznymi funkcjami wejścia/wyjścia, ale również rozszerzeniem języka C++ o możliwość deklarowania zmiennych w prawie dowolnym momencie byle by przed jej użyciem. Uboczną konsekwencją deklaracji zmiennej S (Stopy) w argumencie funkcji for() jest ograniczenie jej zasięgu od instrukcji lub bloku instrukcji ujętego w nawiasy klamrowe następujących bezpośrednio za wywołaniem funkcji for(). Tzn. poza tymi nawiasami S jest zmienną niezdefiniowaną i nie można jej używać. Dolna i górna granica wraz z rozmiarem kroku są teraz stałymi w instrukcji for(), natomiast wyrażenie obliczające odległość w metrach jest teraz trzecim argumentem wywołania funkcji printf(), a nie osobną instrukcją przypisania. Ta ostatnia zmiana ilustruje podstawową zasadę języka C: wszędzie tam, gdzie może wystąpić wartość zmiennej pewnego typu, możesz zastosować bardziej skomplikowane wyrażenie tego typu. Tak więc w miejsce zmiennej typu float, można wstawić wyrażenie (czyli np. działanie matematyczne), którego wynik jest typu zmiennoprzecinkowego ( rzeczywistego). Instrukcja for() zawiera trzy części oddzielone średnikami. Pierwsza część inicjująca pętle ( u nas S = 0) wykonuje się tylko raz przed wejściem do pętli. Druga część jest warunkiem sterującym powtarzaniem pętli (analogicznie jak wyrażenie będące argumentem instrukcji while()). Wyrażenie to jest sprawdzane każdorazowo przed wejściem do pętli. Jeżeli jego wartość logiczna wynosi fałsz, to instrukcja for() kończy wykonywanie pętli. Po obliczeniu i sprawdzeniu warunku wykona się treść pętli tj. instrukcja albo grupa instrukcji ujęta w nawiasy klamrowe występująca bezpośrednio za for(). Następnie obliczana jest wartość wyrażenia znajdującego się w trzeciej części argumentów funkcji for() (w naszym wypadku S = S + KROK ). Trzeci argument jest zazwyczaj wyrażeniem sterującym, tj. takim, które powinno zapewnić zmianę zmiennej sterującej sprawdzanej w warunku sterującym. Symbolicznie zapis instrukcji for() można przekształcić następująco na zapis instrukcji while(). for(wyr1; wyr2; wyr3) instrukcja; wyr1; while(wyr2) instrukcja; wyr3; UWAGA!!! Częstym błędem popełnianym w pierwszej fazie nauki języka C jest stawianie średnika bezpośrednio za nawiasem ograniczającym argumenty instrukcji for() czy też instrukcji while(). W takim przypadku w pętli zostaje wykonywana instrukcja pusta, gdyż średnik jest właśnie traktowany jak instrukcja pusta, co jest szczególnie niebezpieczne w instrukcji while(), gdyż zmienna sterująca jest w takim wypadku zazwyczaj nie zmieniana i dochodzi do pętli nieskończonej. for(wyr1; wyr2; wyr3); while(wyr2); Wykład 1.sxw 04.10.2004 7