plik


ÿþPOLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP  zima 2013 Jzyk programowania: C/C++ Zrodowisko programistyczne: Qt WykBad 5 : UzupeBnienia: instrukcja switch, formaty drukowania. Struktury i rekordy. 2 Instrukcja SWITCH (1) inaczej: Instrukcja wielokrotnego wyboru switch (ksztalt) { case serce : na_niebiesko; break; case trojkat : na_zielono; break; case ksiezyc : na_czerwono; break; default: na_zolto; } 3 Instrukcja SWITCH (2) Ogólna posta instrukcji: switch (selektor) { case staBa: case staBa: ... instrukcja; instrukcja; .... break; case staBa: case staBa: ... instrukcja; instrukcja; .... break; ... case staBa: case staBa: ... instrukcja; instrukcja; .... break; default: instrukcja; instrukcja; .... mo|na pomin } break - instrukcja przerywajca dziaBanie instrukcji switch 4 Instrukcja SWITCH (3) " Selektor mo|e by wyra|eniem jednego z typów porzdkowych (przeliczalnych), tzn. mo|e by typu int, char, a nawet bool, ale nie mo|e by typu rzeczywistego ani typu string. " Ka|da z pozycji staBa mo|e by: Øð staB (np. 5, true czy 'a'), typu takiego samego jak selektor lub umo|liwiajcego jednoznaczne rzutowanie typów Øð wyra|eniem staBym, dajcym si policzy na etapie kompilacji. char zn; cin>>zn; Instrukcja switch jest mniej uniwersalna ni| if-else, bo nie obsBuguje switch (zn) zakresów (od& do& ) ani warto[ci rzeczywistych. { case  a : cout <<  male a  ; break; case  ( : case  ) : cout <<  nawiasy okragle ; break; case  [ : case  ] : cout <<  nawiasy kwadratowe ; break; case  { : case  } : cout <<  nawiasy klamrowe ; break; default: cout <<  inny znak ; } 5 Formaty wydruku Instrukcja zapisywania (drukowania) - przypomnienie cout << wyra|enie_1 << wyra|enie_2 << ... wyra|enie_n Ka|de zapisywane wyra|enie mo|e by jednego z nastpujcych typów: liczbowy (int, double, ...) char string bool (drukuje si jako 0 lub 1) Standardowo liczby rzeczywiste drukowane s z dokBadno[ci 6 cyfr znaczcych w tzw. formacie ogólnym. Je|eli liczba nie daje si zapisa z taka ilo[ci cyfr, drukowana jest w postaci wykBadniczej. Format wydruku mo|na zmieni na jeden z nastpujcych formatów: " format staBy (fixed) - w postaci naturalnej, z kropk dziesitn: cout. fixed; // ustawia format staBy " format naukowy (scientific) - w postaci wykBadniczej, z liter e: cout. scientific; // ustawia format naukowy 6 Precyzja i szeroko[ pola wydruku Precyzj wy[wietlania liczb ustawia si nastpujco: cout. precision(2); Co oznacza precyzja? " dla formatu ogólnego - maksymaln liczb cyfr " dla formatu staBego i naukowego - liczb cyfr po kropce Szeroko[ pola wydruku ustawia si nastpujco: cout. width(5); UWAGA: Je|eli doBczymy plik nagBówkowy <iomanip>, to zamiast powy|szych funkcji (odpowiednio) fixed, precision, width mo|emy u|ywa wygodniejszych manipulatorów fixed, setprecision, setw: cout << fixed; cout << setprecision(3); cout << setw(7); np.: cout << fixed << setprecision(2) << setw(8); Aby uzyska równej szeroko[ci kolumny w wydruku kolejnych wierszy (liczb, znaków, napisów), nale|y: " ustawi staB szeroko[ pola wydruku (bardziej ogólne  za pomoc setw) albo " zastosowa znak tabulacji '\t' lub ''\t'' po ka|dej drukowanej warto[ci. 7 Wydruk w kolumnach - podsumowanie Aby uzyska wydruk liczb w Badnych, równych kolumnach (o jakiej[ szeroko[ci w) i z wymagan precyzj d miejsc po kropce dziesitnej, najpro[ciej jest doBczy bibliotek <iomanip> i u|ywa tzw. standardowych manipulatorów w sposób nastpujcy: a) przed drukowaniem czegokolwiek ustawi staBy format wydruku za pomoc manipulatora fixed (tzn. w postaci naturalnej, z kropk dziesitn) oraz precyzj wydruku, czyli liczb miejsc po kropce, u|ywajc manipulatora setprecision, w sposób nastpujcy: cout << fixed << setprecision (d); gdzie warto[ d (liczba cyfr po kropce) mo|e by konkretn liczb, staB, zmienn, a nawet wyra|eniem. b) w ptli zawierajcej instrukcj drukowania - przed wyprowadzeniem jakiej[ warto[ci - poda, jak szeroko[ w (staBa, zmienna, wyra|enie) ma ona zaj, u|ywajc manipulatora setw, np.: cout << setw(4) << x << setw(7) << y << endl; albo: cout << setw(12) << x[i][j]; Precyzj wydruku te| mo|na ustawia tak jak szeroko[ wydruku - w ptli, do ka|dej drukowanej warto[ci inn. 8 Tablice i rekordy S to zBo|one struktury danych, które pozwalaj za pomoc jednej nazwy zapamita wiele warto[ci (elementów). " w tablicy (zmiennej typu tablicowego) - wszystkie elementy musz by tego samego typu, rozró|niane s za pomoc indeksów. " w rekordzie (zmiennej typu struktura) - elementy (pola) rekordu mog by ró|nych typów, rozró|niane s za pomoc nazw. ... ... i N-1 0 indeksy elementów 2 1 -3 a 7 12 nazwy pól typy pól a[0] ... a[N-1] ... a[i] tak odwoBujemy si do elementów tablicy o nazwie a imie string osoba1.imie nazwisko string osoba1.nazwisko plec char ... ...a tak odwoBujemy si dzien int do pól rekordu o miesiac int nazwie osoba1 rok int ... zarobki double osoba1.zarobki jest_w_pracy bool ... 9 Struktury i rekordy REKORDY pozwalaj za pomoc jednej nazwy przechowywa wiele elementów ró|nych typów. {eby zdefiniowa pojedyncze rekordy, trzeba najpierw zdefiniowa ich struktur, czy nowy typ danych. Definicja struktury - czyli typu strukturalnego (inaczej: rekordowego) struct nazwa struktury { typ pola nazwa pola, ... nazwa pola; // nazwy pól i ich typ ... typ pola nazwa pola, ... nazwa pola; } ; // uwaga - [rednik na koDcu Definicja pojedynczych rekordów - czyli zmiennych typu strukturalnego nazwa struktury nazwa rekordu, ... , nazwa rekordu; nazwy zmiennych tego typu typ danych Desygnator ( oznacznik ) pola rekordu nazwa rekordu . nazwa pola tu s kropki lub nazwa rekordu . nazwa pola . nazwa pola itd. 10 Nazwy typów a nazwy zmiennych " Definiujc struktury, czyli nowe typy danych, trzeba bardzo uwa|a, by nie pomyli nazwy struktury (czyli nowo zdefiniowanego typu) z nazw zmiennej tego typu. zalecany styl " Aby unikn pomyBek, warto nazwy typów strukturalnych rozpoczyna od wielkiej litery S (jak Struktura) albo T (jak Typ) albo od innej wielkiej litery. PrzykBady: struct SOsoba { string imie, nazwisko; char plec; zdefiniowali[my nowy typ danych - int dzien, miesiac, rok; now struktur o nazwie SOsoba; double zarobki; //pole zarobki jest typu double ka|de z pól struktury ma podany typ bool jest_w_pracy; }; SOsoba osoba1, osoba2, szef; // tak definiujemy rekordy - zmienne typu SOsoba ... cin >> szef.zarobki; a tak odwoBujemy si do pól tych rekordów szef.imie = "Jan"; ... cin >> SOsoba.zarobki; Tak nie wolno! SOsoba to nie zmienna, tylko typ danych. SOsoba.plec= M ; 11 PrzykBad struktury zagnie|d|onej nazwa typu danych nazwy pól // najpierw trzeba zdefiniowa struktur SData: struct SData { int dzien, miesiac, rok; }; // a dopiero teraz mo|na zdefiniowa struktur SOsoba: struct SOsoba { string imie, nazwisko; char plec; SData data; // tu jest pole o nazwie data, typu SData double zarobki; bool jest_w_pracy; }; SOsoba pracownik; // pracownik jest zmienn typu SOsoba pracownik.data.rok = 1986;// tak odwoBujemy si do pól struktur zagnie|d|onych Operacje wykonywane na rekordach (i tablicach) 12 REKORDY nale|y wczytywa i drukowa odwoBujc si do kolejnych pól rekordu, nie wolno tych operacji wykonywa na caBych rekordach: cout << szef.nazwisko << szef.imie << szef.zarobki // drukujemy ró|ne dane szefa (pola) cout << szef; // nie wolno drukowa szefa w caBo[ci ! Ta sama zasada odnosi si do TABLIC: wczytujemy i drukujemy kolejne elementy tablic, a nie tablice w caBo[ci: const N=20; int i, a[N], b[N]; for (i=0; i<N; i++) tablice wczytujemy element po elemencie cin >> a[i]; cin >> b; // nie wolno wczytywa tablic w caBo[ci b=a; // i nie wolno kopiowa caBych tablic (podstawia jednych pod drugie) UWAGA: inicjowanie rekordów w sposób analogiczny do inicjowania tablic jest niewskazane, gdy| mo|e by ró|nie interpretowane przez kompilatory. Tablice rekordów 13 REKORDY bardzo czsto s elementami tablic: const N=10; struct Tpunkt { double x,y; definicja struktury o nazwie Tpunkt }; Tpunkt p[N], q[N]; // definicja tablic p i q zawierajcych N elementów typu Tpunkt for (int i=0; i<N; i++) tak wczytujemy dane  pola rekordów - do tablicy p cin >> p[i].x >> p[i].y; for (int i=0; i<N; i++) tak nie wolno - nie da si wczyta rekordów w caBo[ci cin >> p[i]; for (int i=0; i<N; i++) q[i] = p[i]; ale mo|na wykonywa przypisania caBych rekordów, o ile ich polami nie s tablice - na to Tpunkt schowek = p[0]; nale|y uwa|a ! Taka mo|liwo[ przypisania nie jest p[0] = p[N-1]; wic zbyt bezpieczna. p[N-1] = schowek; 14 Struktury rekordów a klasy obiektów Programowanie strukturalne: struktura - typ danych (inaczej: typ strukturalny, typ rekordowy, wzorzec struktury, struktura szablon rekordów) zmienne danego typu rekord 1 rekord n rekord 2 . . . (zmienne strukturalne, bywaj w uproszczeniu, niezbyt poprawnie, nazywane strukturami) Programowanie obiektowe: klasa - typ danych klasa (inaczej: typ obiektowy, szablon obiektów) zmienne danego typu (zmienne obiektowe, obiekt 1 obiekt n obiekt 2 . . . instancje klasy, egzemplarze klasy)

Wyszukiwarka

Podobne podstrony:
wyklad 7 zap i, 11 2013
wyklad 8 zap i, 11 2013
wyklad 6 zap i, 11 2013
Techniki negocjacji i mediacji w administracji wykłady 05 11 2013
wyklad 3 zap i,! 10 2013
Wykład 28 11 2013
wyklad zap i, 12 2013
wyklad zap i, 12 2013
wyklad 9 zap i, 2 12 2013
wyklad 1 zap i, 7 10 2013
wyklad 2 zap i, 10 2013
wyklad 4 zap i,( 10 2013 poprawiony
CHEMIA dla IBM Wyklad 8) 11 2013
6 11 2013 EGIPT W OKRESIE STAREGO I ŚREDNIEGO PAŃSTWA wykład

więcej podobnych podstron