STRUKTURY. ZŁOŻONE PROJEKTY
|
|
- Amelia Kozieł
- 8 lat temu
- Przeglądów:
Transkrypt
1 STRUKTURY. ZŁOŻONE PROJEKTY 150
2 Struktura (rekord) Często w programie buduje się zestaw danych opisujących pewien obiekt za pomocą zbioru zmiennych o zróżnicowanych typach. Przydatne jest utworzenie złożonego typu danych grupującego wszystkie informacje o takim obiekcie Typ taki nazywa się zwykle rekordem, choć w C++ mówi się raczej o strukturze ze względu na stosowane do jej definicji słowo kluczowe struct. Każdą z danych wchodzących w skład rekordu nazywa się polem Rekord jest jednym z podstawowych elementów, z jakich złożona jest większość współczesnych baz danych Rekord pole 1 pole 2 pole 3 151
3 Deklaracja zmiennej - rekordu Składnia: struct { deklaracje zmiennych - pól... } nazwa_zmiennej_rekordowej; Przykład: struct { char nazwisko[20]; long telefon; } kontakt; Inicjalizacja: struct { char nazwisko[20]; long telefon; } kontakt = {"Kowalski", }; zmienna: kontakt pole: nazwisko pole: telefon 152
4 Deklaracja typu - rekordu Składnia: struct nazwa_struktury { deklaracje zmiennych - pól... }; Przykład: struct Kontakt { char nazwisko[20]; long telefon; }; struct Kontakt kolega; // Zmienne - rekordy Kontakt kolezanka; // można pominąć 'struct' Kontakt policja = { "Numer alarmowy", 112 }; 153
5 Deklaracja typu i zmiennej naraz Składnia: struct nazwa_struktury { deklaracje zmiennych - pól... } nazwy_zmiennych; Przykład: struct Kontakt { char nazwisko[20]; long telefon; } kolega1, kolega2; Kontakt k; // Użycie nowego typu 154
6 Korzystanie z rekordu Każde pole rekordu jest osobną zmienną, do której dostęp uzyskuje się poprzez: nazwę zmiennej rekordowej, operator. oraz nazwę pola Do zmiennej rekordowej jako całości można użyć operatora przypisania (=) oraz porównania (==,!=) wobec wartości, która ma typ rekordowy o tej samej strukturze Przypisanie powoduje skopiowanie wszystkich pól z rekordu po prawej stronie znaku = Rekordy uznaje się za równe (==) jeżeli wszystkie ich pola są równe. Rekordy są różne (!=) jeżeli różnią się co najmniej jednym polem 155
7 Przykład użycia rekordu struct Zespolona // liczba zespolona { float Re, Im; }; // dwa pola naraz Zespolona z1,z2 = {1,2}; z1.re=5; z1.im=-1' // z1= 5-i // z2= 1 + 2i Zespolona suma; suma.re = z1.re + z2.re; suma.im = z1.im + z2.im; z2=z1; // przypisanie if (z1==z2) // porównanie cout << "Liczby jednakowe" << endl 156
8 Dostęp do rekordu przez wskaźnik Dla typu rekordowego można utworzyć odpowiedni wskaźnik służący do pokazywania na takie rekordy Dostęp do pól w zmiennej pokazywanej przez wskaźnik odbywa się z użyciem operatora -> Przykład: struct Zesp { float Re, Im; }; Zesp z1,z2; Zesp *wsk; wsk=&z1; wsk -> Re= 0; wsk -> Im= 1; (*wsk).re=0; (*wsk).im=1; // deklaracja wskaźnika // 'wsk' pokazuje na 'z1' // dostęp do pól // można też tak ale po co? z2= *wsk; // pobranie wartości spod wskaźnika wsk=&z2 // teraz 'wsk' pokazuje na 'z2' 157
9 Wskaźnik do rekordu jako parametr Często podczas przekazywania do i z funkcji danych w postaci rekordu stosuje się wskaźnik Znacznie przyspiesza to działanie programu, ponieważ do funkcji przesyłany jest tylko adres zamiast całego rekordu Przykład: void wstawzero(zesp *wsk) { } wsk->re=0; wsk->im=0; // funkcja wypełnia rekord // wskazany przez 'wsk' void main() { Zesp z; wstawzero(&z); } 158
10 Tablica rekordów Dla typu rekordowego można utworzyć tablicę Dostęp do konkretnego pola wymaga wtedy podania: nazwy tablicy, indeksu oraz nazwy pola. Przykład: struct Grupa { int numer; float srednia }; Grupa grupy[3]; grupy[0].numer=11; grupy[1].numer=21; grupy[2].numer=41; for (i=0; i<3; i++) grupy[i].srednia=5.0; // deklaracja struktury // tablica rekordów 159
11 Pola bitowe Pola bitowe pomagają oszczędzać pamięć Są również przydatne w komunikacji ze sprzętem Jest to rodzaj pola w strukturze, który pozwala zapisać informację na małej grupie bitów Każde pole bitowe musi być zmienną całkowitoliczbową Przykład: struct pogoda { int deszcz:1; int wiatr :1; int slonce:1; int temp :2; // załóżmy, że są 4 przedziały }; // razem 5 bitów zamiast
12 Unie Unie tworzy się dla oszczędności miejsca w pamięci. Jest to kontener, w którym można zapisać zmienne o różnych typach, przy czym każda z nich zapisywana jest w tym samym miejscu niszcząc poprzednią wartość Unia ma rozmiar równy rozmiarowi największego z typów składowych Na programiście spoczywa obowiązek pamiętania jakiego typu wartość zapisana była ostatnio Przykład: union intfloat { int calkowita; float rzeczywista; }; intfloat unia; unia.calkowita=5; unia.rzeczywista=4.5; // calkowita jest zniszczona! cout << unia.calkowita << endl; // to nie będzie 5! 161
13 Parametry funkcji main Wiele programów pozwala użytkownikowi podać parametry wywołania, np. w linii komend lub we właściwościach skrótu W programie w C++ można te parametry odczytać definiując parametry wywołania dla funkcji main Zakłada się, że cały tekst wywołania programu podzielony jest na części oddzielone spacjami Pierwszy parametr (int argc) podaje liczbę takich części łącznie z samą nazwą programu Drugi z parametrów (char *argv[]) jest tablicą stringów zawierającą poszczególne części Przykład: void main(int argc, char *argv[]) { for (int i=0; i<argc; i++) cout << argv[i] << endl; // wypisanie param. } 162
14 Projekty (1) Język C++ umożliwia budowę programu złożonego z wielu osobnych plików CPP Pozwala to bardziej efektywnie zarządzać kodem źródłowym oraz skrócić czas kompilacji Zazwyczaj podział kodu na części, tzw. moduły, odbywa się na zasadzie funkcjonalnej: fragmenty dotyczące określonej dziedziny umieszczane są w osobnym pliku Integrację plików zapewnia system SDK dzięki tzw. projektowi, do którego należy dodać wszystkie moduły, z których złożony jest program System SDK sam dba o to by skompilować te moduły, które uległy zmianom od ostatniej kompilacji, a następnie dokonuje ich konsolidacji W przypadku kompilacji z linii komend - budowy programu dokonuje program make w oparciu o plik makefile 163
15 Projekty (2) Kompilacja każdego z modułów odbywa się niezależnie W przypadku, gdy moduł korzysta ze zmiennych lub funkcji zdefiniowanych w innym module, należy zamieścić w nim odpowiednią deklarację Zazwyczaj dokonuje się tego poprzez napisanie i włączenie odpowiedniego pliku nagłówkowego.h Użycie funkcji z drugiego modułu wymaga włączenia jej prototypu (nagłówka) Użycie zmiennej zdefiniowanej w innym module wymaga umieszczenia jej deklaracji z użyciem słowa extern Przykład: void funkcja (int param); // prototyp extern int zmienna; // zmienna zewnętrzna 164
16 Przykład projektu - 2 moduły MAIN.CPP: #include <iostream.h> void funkcja(); extern int zmienna; int globalna; void main() { } cout << "Main.cpp, "; cout << "main().\n"; funkcja(); cout << zmienna; // 10 MODUL.CPP: #include <iostream.h> extern int globalna; int zmienna; void funkcja() { } cout << "Modul.cpp, "; cout << "funkcja().\n"; zmienna=10; 165
17 Przykład - 2 moduły i zbiór.h MODUL.H: MAIN.CPP: void funkcja(); extern int zmienna; #include <iostream.h> #include "modul.h" MODUL.CPP: void main() { } cout << "Main.cpp, "; cout << "main().\n"; funkcja(); cout << zmienna; // 10 #include <iostream.h> int zmienna; void funkcja() { } cout << "Modul.cpp, "; cout << "funkcja().\n"; zmienna=10; 166
18 Wielokrotna inkluzja Czasem zdarza się, że plik nagłówkowy jest włączany do pewnego modułu kilkakrotnie: raz bezpośrednio oraz dodatkowo pośrednio przez inne pliki nagłówkowe Niepotrzebnie wydłuża to kompilację i może spowodować błąd powielenia tej samej deklaracji, np. zmiennej globalnej. Zwykle stosuje się w tym celu zabezpieczenie w postaci kompilacji warunkowej: #ifndef NAZWA_H #define NAZWA_H... (treść zbioru nagłówkowego)... #endif // kompilacja warunkowa // definicja stałej // koniec kompilacji warunkowej 167
19 Wielokrotna inkluzja - przykład MAIN.CPP: #include "punkt.h" #include "wektor.h" #include "trojkat.h" PUNKT.H: (deklaracje - punkt) TROJKAT.H: #include "punkt.h" (deklaracje - trójkąt) MAIN.CPP po inkluzjach: (deklaracje - punkt) (deklaracje - punkt) (deklaracje - wektor) (deklaracje - punkt) (deklaracje - trójkąt) WEKTOR.H: #include "punkt.h" (deklaracje - wektor) 168
20 Wielokrotna inkluzja - rozwiązanie MAIN.CPP: #include "punkt.h" #include "wektor.h" #include "trojkat.h" PUNKT.H: #ifndef PUNKT_H #define PUNKT_H (deklaracje - punkt) #endif WEKTOR.H: #include "punkt.h" (deklaracje - wektor) TROJKAT.H: #include "punkt.h" (deklaracje - trójkąt) MAIN.CPP po inkluzjach: #ifndef PUNKT_H #define PUNKT_H (deklaracje - punkt) #endif // prawda #ifndef PUNKT_H // fałsz #define PUNKT_H // pominięte (deklaracje - punkt) #endif (deklaracje - wektor) #ifndef PUNKT_H #define PUNKT_H // pominięte (deklaracje - punkt) #endif (deklaracje - trójkąt) 169
21 Modyfikatory typów (1) Przed deklaracją zmiennej lub funkcji może stać kilka możliwych modyfikatorów, mogących wpływać na znaczenie deklaracji. Są to: extern oznacza deklarację symbolu zdefiniowanego na zewnątrz, domyślne dla prototypu funkcji auto oznacza utworzenie zmiennej nietrwałej na stosie, domyślne dla zmiennych wewnątrz funkcji. Dla globalnych - niedostępne. static oznacza utworzenie zmiennej w pamięci, czas życia równy czasowi działania programu, domyślne dla zmiennych globalnych. Użyte wewnątrz funkcji skutkuje tym, że przy kolejnych wywołaniach zmienna pamięta poprzednią wartość. const oznacza zmienną, której wartości nie można zmieniać, można nadać ją wyłącznie przy inicjalizacji. Użyte w odniesieniu do parametru funkcji - informuje, że funkcja nie może zmieniać wartości tej zmiennej 170
22 Modyfikatory typów (2) typedef oznacza, że nie deklarujemy zmiennej ale nazwę nowego typu danych. Typu tego można potem użyć do tworzenia zmiennych. volatile oznacza zmienną, której wartość może być zmieniana z zewnątrz programu, kompilator nie umieści jej w rejestrze procesora register oznacza, że zmienna będzie tak często wykorzystywana, że chcemy aby kompilator przechowywał ją w rejestrze procesora inline używa się dla deklaracji funkcji, oznacza sugestię aby przy każdym wywołaniu tej funkcji kompilator wklejał jej kod maszynowy w całości zamiast organizować skok do podprogramu. Ma to sens dla bardzo krótkich funkcji, działają wtedy szybciej 171
23 BIBLIOTEKA STDIO.H 172
24 Charakterystyka biblioteki stdio.h Nazwa pochodzi od Standard Input - Output Realizuje zadania związane z obsługą wejścia - wyjścia, np.: Wczytywanie danych z klawiatury Wyświetlanie danych na ekranie monitora Wprowadzanie i wyprowadzanie danych poprzez porty komputera, np. drukowanie na drukarce Odczyt danych z pliku dyskowego Zapis do pliku dyskowego Biblioteka ta należy do standardu ANSI i dołączana jest praktycznie do wszystkich kompilatorów C/C++. Zapewnia więc wysoką przenośność kodu W stdio.h wszystkich operacji we/wy dokonuje się na tzw. strumieniach (ang. stream) odpowiadających poszczególnym urządzeniom wejścia/wyjścia 173
25 Strumienie Strumień to abstrakcyjne urządzenie wejścia-wyjścia, które pozwala na pobieranie z niego danych lub wysyłanie danych do niego Celem jest uniezależnienie programisty od sprzętu, a nawet od jego rodzaju. Np. wysyłanie danych na ekran (tekstowy), do pliku dyskowego czy na drukarkę powinno być realizowane tymi samymi funkcjami i to niezależnie od sprzętu. Realizację operacji wejścia wyjścia dopasowaną do danego urządzenia zapewniają już funkcje biblioteczne w zależności od właściwości użytego strumienia. 174
26 Standardowy strumień wyjściowy stdout - domyślny, predefiniowany strumień, do którego program wysyła informacje tekstowe Zwykle jest on związany z ekranem monitora lub oknem tekstowym (tzw. konsola) w graficznym systemie operacyjnym System operacyjny umożliwia jednak podczas uruchamiania programu przekierowanie, zmianę standardowego urządzenia wyjściowego na inne, np. plik, drukarkę Na przykład komenda (DOS) dir > plik.txt spowoduje zapis listy plików z aktualnego katalogu do pliku tekstowego plik.txt zamiast na ekran. Wiele funkcji z biblioteki stdio.h realizuje wydruk do stdout, co w zasadzie oznacza wydruk na ekranie, ale umożliwia także przekierowanie podczas uruchamiania programu 175
27 Funkcje wyjścia Wysyłanie pojedynczego znaku: putchar (do stdout) fputc (do dowolnego strumienia) putc (do dowolnego strumienia) Wysyłanie ciągu znaków (stringu): puts (do stdout) fputs (do dowolnego strumienia) Formatowane wyjście: printf (do stdout) fprintf (do dowolnego strumienia) sprintf (do stringu) 176
28 Funkcja putchar Wysyła pojedynczy znak do stdout. Prototyp: int putchar (int znak); Parametry: znak kod ASCII znaku, który ma być wysłany. Zwracana wartość W przypadku powodzenia, funkcja zwraca wartość znak. W przypadku błędu zwracana jest wartość EOF (stała ta zdefiniowana jest przez bibliotekę stdio.h) Przykłady putchar(65); putchar('b'); // // Znak A putchar('\n'); // Znak końca linii 177
29 Funkcja puts Wysyła string do stdout dodając na końcu znak nowej linii. Prototyp: int puts (char *tekst); Parametry: tekst wskaźnik do stringu zakończonego znakiem '\0'. Zwracana wartość W przypadku powodzenia zwracana jest wartość nieujemna. W przypadku błędu zwracana jest wartość EOF. Przykłady puts("hello"); char *tekst="world!"; puts(tekst); //'world!' pojawi się pod 'Hello' if (puts("abrakadabra")==eof) // kontrola błędu puts ("Błąd!"); 178
30 Przykład użycia puts i putchar void main() { char tekst[5]= { 'A','B',0, 'C','D' }; // wyświetlenie stringu aż do znaku '\0' puts(tekst); // wyświetlone znaki: AB\n // wyświetlenie wszystkich znaków z tablicy for (int i=0; i<5; i++) putchar(tekst[i]); // wyświetlone znaki : AB\0CD } 179
31 Funkcja printf i jej pochodne Funkcje: printf, sprintf, fprintf itp. służą do tworzenia i wysyłania (wyświetlania) tekstu złożonego z wielu elementów, takich jak: znaki (w tym znaki specjalne) ciągi znaków (zakończone znakiem '\0') liczby całkowite liczby zmiennoprzecinkowe adresy Funkcje te dokonują automatycznej konwersji każdej z powyższych danych na gotowy ciąg znaków oraz wysyłają go we wskazane miejsce (np. na ekran, do stringu lub do pliku) Umożliwiają elastyczne formatowanie poszczególnych pól, co pozwala programiście na kontrolę wyglądu i układu tekstu 180
32 Funkcja printf Wysyła sformatowany tekst do stdout. Prototyp: int printf (char *format, lista_argumentów); int printf (char *format,...); // formalnie Parametry: format tzw. string formatu, definiujący treść i format wyświetlanego tekstu, w którym można umieścić tzw. pola lista argumentów ciąg wyrażeń oddzielonych przecinkami, odpowiadających poszczególnym polom w formacie. Liczba wyrażeń w liście argumentów powinna odpowiadać liczbie pól w formacie. W szczególności lista może być pusta. Zwracana wartość Funkcja zwraca całkowitą liczbę wysłanych znaków. W przypadku błędu zwracana jest wartość ujemna. 181
33 String formatu Składa się z dowolnych znaków, z których większość jest wysyłana bezpośrednio na wyjście. Jeżeli w tekście wystąpi znak %, oznacza on pole, które będzie wypełnione wartością odpowiedniego argumentu, zgodnie z opisem formatu następującym po znaku %. Kolejność argumentów odpowiada kolejności pól w formacie. Przykład: printf ("Ala ma %d koty i %d psy.", 2, 3); Ala ma 2 koty i 3 psy. 182
34 Opis pola w formacie printf % [flagi] [szerokość] [.precyzja] [rozmiar] typ Typ - element obowiązkowy pola informujący o rodzaju wyświetlanej wartości (np. czy jest to liczba dziesiętna czy szesnastkowa, całkowita czy zmiennoprzecinkowa, czy może ciąg znaków). Pola opcjonalne: Flagi - określają niektóre szczegóły wyświetlania Szerokość - minimalna liczba znaków przeznaczonych na wydruk wartości pola Precyzja - dla liczb zmiennoprzecinkowych wyznacza liczbę miejsc po przecinku Rozmiar - informuje o rozmiarze interpretowanego argumentu (np. short/int/long lub double/long double ) 183
35 Wyświetlanie znaków Kod pola: c Odpowiedni argument funkcji printf powinien być typu char. Zostanie on potraktowany jako kod ASCII znaku do wysłania (wyświetlenia). W przypadku podania wartości typu całkowitego, zostanie wyświetlony znak odpowiadający jej modulo 256 Przykłady: printf ("Litera %c.",'a'); Litera A. printf ("Litera %c i %c.",65, ); // 2 pola Litera A i B. 184
36 Wyświetlanie stringów Kod pola: s Odpowiedni argument funkcji printf musi być typu char *, a więc tablicą znaków, wskaźnikiem na znak lub bezpośrednio stringiem. Wyświetlone zostaną wszystkie znaki aż do najbliższego napotkanego znaku '\0'. Przykłady: printf ("Powiem Ci: %s", "Cześć!"); Powiem Ci: Cześć! char agent[]="bond"; char *tekst=agent; printf ("Nazywam się %s, %s %s.", agent, "James", tekst); Nazywam się Bond, James Bond. 185
37 Wyświetlanie liczb całkowitych Kod pola d lub i: liczba całkowita dziesiętna ze znakiem Argument powinien być liczbą całkowitą ze znakiem. Dla zbyt dużej wartości unsigned wynik będzie błędny. Kod poda u: nieujemna liczba dziesiętna (unsigned) Dla wartości ujemnej wynik będzie błędny. Kod poda x lub X: nieujemna liczba szesnastkowa (unsigned) Dla wartości ujemnej wynik będzie błędny. Dla pola x użyte będą cyfry a...f, dla pola X - A...F. Kod poda o : liczba ósemkowa ze znakiem Argument powinien być liczbą całkowitą ze znakiem. Dla zbyt dużej wartości unsigned wynik będzie błędny. Dla wszystkich powyższych rodzajów pól, podanie argumentu zmiennoprzecinkowego spowoduje wyświetlenie błędnej wartości 186
38 Wyświetlanie liczb rzeczywistych Kod pola e lub E: liczba rzeczywista w notacji naukowej Argument powinien być liczbą zmiennoprzecinkową. Jeżeli typ wartości będzie całkowity, wynik może być błędny. Wartość zostanie wyświetlona w tzw. notacji naukowej, z użyciem znaku e lub E (np E-14) Kod poda f : liczba rzeczywista Argument jak wyżej. Wartość zostanie wyświetlona w zwykły sposób, z kropką dziesiętną, zazwyczaj ze stałą liczbą cyfr po kropce Kod pola g lub G: liczba rzeczywista Argument jak wyżej. Wartość zostanie wyświetlona w notacji naukowej lub zwykłej, w sposób najkrótszy z możliwych 187
39 Przykłady pól dla liczb całkowitych Pole Argument Efekt %d %d %u %u %x d0 %X D0 %x -10 FFFFFFF6 %d %o
40 Przykłady pól dla liczb rzeczywistych Pole Argument Efekt %f %f 10.0 / %f %e e+01 %E / E+00 %g %g 10.0/ %g E+009 %G E
41 Wyświetlanie adresów Kod pola: p Argument powinien być wskaźnikiem na dowolny typ danych. Wyświetlony zostanie adres fizyczny na który wskazuje wskaźnik, w postali liczby szesnastkowej. Zakres możliwych adresów i sposób ich prezentacji zależy od kompilatora i od tego na jaki system operacyjny tworzony jest program. Przykład int tab[10]; printf ("Adres tablicy: %p.", tab); 190
42 Znaki specjalne Szereg znaków sprawia kłopoty z zapisem wewnątrz stringu ze względu na ich specjalne znaczenie w składni języka C++: " zapisuje się jako: \" ' zapisuje się jako: \' \ zapisuje się jako: \\ (TAB) zapisuje się jako: \t (NEWLINE) zapisuje się jako: \n Z powodu użycia znaku % jako oznaczenia pola w stringu formatu funkcji printf, w celu jego wyświetlenia przez tę funkcję należy użyć sekwencji: %%. 191
43 Szerokość pola Liczba znaków poświęconych na wyświetlenie pola Jeżeli wyświetlana wartość składa się w rzeczywistości z mniejszej liczby znaków, brakujące uzupełniane są domyślnie za pomocą spacji z lewej strony Przykłady: printf ( "Liczba:%4d,", -1 ); printf ( "Liczba:%4d,", 100 ); printf ( "Liczba:%4f,", -1.1 ); printf ( "Imię:%10s.", "Piotr" ); Liczba: -1, // dopisane 2 spacje Liczba: 100, // dopisana 1 spacja Liczba:-1.1, // brak dopisanych spacji Imię: Piotr. // dopisane 5 spacji 192
44 Precyzja W przypadku liczb zmiennoprzecinkowych pozwala ustalić wyświetloną liczbę cyfr po przecinku Jeżeli liczba posiada więcej cyfr po przecinku - nastąpi zaokrąglenie do najbliższej wartości Jeżeli liczba posiada mniej cyfr po przecinku - zostaną uzupełnione zerami Jeżeli nie określono precyzji - użyta zostanie domyślna Przykłady: printf ( "Liczba pi:%.2f,", ); printf ( "Liczba e :%10.2e,", ); printf ( "Liczba -1:%6.2f,", -1.0 ); Liczba pi:3.14, Liczba e : 2.72e+00, Liczba 0 : -1.00, // dopisane 2 spacje // dopisana 1 spacja 193
45 Rozmiar argumentu Element ten pozwala sprecyzować liczbę bitów, na jakiej zapisano argument. Bywa to konieczne w przypadku wyświetlania wartości o dużych zakresach, np. long, double, long double Wartości: h: Dla pól (d, i, o, u, x, X) - short int l: Dla pól (d, i, o, u, x, X) - long int Dla pól (f, e, E, g, G) - double L: Dla pól (f, e, E, g, G) - long double Przykład: printf ( "Duża liczba:%lu.", ); Duża liczba:
46 Flagi Pozwalają sterować dodatkowymi możliwościami formatowania Wartości: - Wyrównuje tekst do lewej strony pola, dopisywane znaki (np. spacje) pojawiają się po prawej stronie pola + Dla pól liczbowych - liczby dodatnie będą wypisane ze znakiem '+' na początku (spacja) Dla pól liczbowych - liczby dodatnie będą wypisane z dodatkowym znakiem spacji na początku (zamiast znaku) 0 Tekst uzupełniany jest znakami '0' zamiast spacji jeżeli wymaga tego szerokość pola Przykład: printf ( "%+08.2f,", 40.1 );
47 Przykłady użycia printf printf ("Ala ma kota."); printf ("%s %c. ma %d koty.\n", "Paweł", 'A', 2); float tab[5]={0.01, -0.1, 10, -100, }; for (int i=0; i<5; i++) printf("liczba %d: %+7.2f\n", i+1, tab[i]); Ala ma kota. Paweł A. ma 2 koty. Liczba 1: Liczba 2: Liczba 3: Liczba 4: Liczba 5: _ Przykład: printf.cpp 196
48 Zalety i wady funkcji printf Zalety: Zwięzłość zapisu Duża elastyczność i łatwość formatowania Przenośność Wady: Konieczność informowania o typie każdego argumentu (nie ma jej np. dla cout) Brak kontroli zgodności rodzaju pól z typami argumentów Stosunkowo niska czytelność kodu 197
49 funkcje pochodne od printf Umieszczenie tekstu sformatowanego w stringu int sprintf(char *buf, char *format,...); UWAGA! Pamięć wskazywana przez buf musi być wcześniej pobrana, na przykład jako deklaracja tablicy. Wysłanie tekstu sformatowanego do podanego strumienia int fprintf(file *strumień, char *format,...); UWAGA! strumień musi być uprzednio przygotowany do odbioru danych, czyli otwarty. Wersje funkcji printf z mechanizmem tzw. zmiennej liczby argumentów (dla zaawansowanych) Wynik do stdout int vprintf(char *format,...); Wynik do stringu int vsprintf(char *buf, char *format,...); Wynik do pliku int vfprintf(file *buf, char *format,...); 198
50 Standardowy strumień wejściowy stdin - domyślny, predefiniowany strumień, z którego program pobiera informacje tekstowe Zwykle jest on związany z klawiaturą System operacyjny umożliwia jednak podczas uruchamiania programu przekierowanie, zmianę standardowego urządzenia wyjściowego na inne, np. plik Na przykład komenda (DOS) program.exe < plik.txt spowoduje, że uruchamiany program zamiast z klawiatury zacznie pobierać informacje z pliku tekstowego plik.txt Wiele funkcji z biblioteki stdio.h realizuje odczyt z stdout, co w zasadzie oznacza odczyt z klawiatury, ale umożliwia także przekierowanie podczas uruchamiania programu 199
51 Funkcje wejścia Wprowadzanie pojedynczego znaku: getchar (z stdin) fgetc (z dowolnego strumienia) getc (z dowolnego strumienia) Wprowadzanie ciągu znaków (stringu): gets (z stdin) fgets (z dowolnego strumienia) Formatowane wejście: scanf (z stdin) fscanf (z dowolnego strumienia) sscanf (ze stringu) 200
52 Funkcja getchar Wprowadza pojedynczy znak z stdin. Prototyp: int getchar (); Zwracana wartość W przypadku powodzenia, funkcja zwraca kod odczytanego znaku jako typ int. W przypadku błędu zwracana jest wartość EOF (stała zdefiniowana przez bibliotekę stdio.h) Przykład int kod=getchar(); printf("podany znak to %c.\n", kod); getchar(); // czekanie na ENTER 201
53 Funkcja gets Wprowadza pod podany adres jedną linię tekstu (do najbliższego znaku nowej linii) z stdin (domyślnie z klawiatury) zastępując znak nowej linii znakiem '\0'. Prototyp: char *gets (char *buf); Parametry: buf wskaźnik do fragmentu pamięci przeznaczonego na tekst. Zwracana wartość: W przypadku powodzenia zwracany jest wskaźnik równy buf. W przypadku błędu zwracana jest wartość NULL (czyli 0). Przykłady char adres[256]; gets(adres); printf("twój adres: %s\n", adres); 202
54 Problem alokacji pamięci Wskaźnik podawany jako parametr w wielu funkcjach wejścia wskazuje miejsce w pamięci przeznaczone do umieszczenia danych. Miejsce to musi zostać uprzednio pobrane od systemu, Wskaźnik powinien więc w tej sytuacji być "ustawiony" na istniejącą zmienną (tablicę) Ponieważ nazwa tablicy jest wskaźnikiem na jej początek, można podać tę nazwę jako parametr. Typowy błąd, jaki można popełnić korzystając ze zmiennej wskaźnikowej: char * wsk; gets(wsk); // przypadkowe miejsce!!! Prawidłowe rozwiązanie: char tab[100]; char *wsk = tab; gets(wsk); // ustawienie wskaźnika! // lub: gets(tab); 203
55 Funkcja scanf Wprowadza sformatowane dane z stdin. Prototyp: int scanf (char *format, lista_wskaźników); Parametry: format string definiujący oczekiwany format tekstu, w tym liczbę i rodzaj pól (wprowadzanych danych), lista wskaźników ciąg wyrażeń o typie wskaźnikowym, oddzielonych przecinkami, odpowiadających poszczególnym polom w formacie. Liczba wyrażeń w liście wskaźników powinna odpowiadać liczbie pól w formacie. W szczególności lista może być pusta. Zwracana wartość Funkcja zwraca liczbę prawidłowo odczytanych pól. W przypadku błędu uniemożliwiającego odczyt, zwraca EOF. 204
56 String formatu dla scanf Odzwierciedla oczekiwany format tekstu na wejściu. Może się składać z elementów: spacja lub tabulacja (tzw. whitespace) - dowolna liczba znaków spacji, tabulacji lub nowej linii zostanie odczytana i zignorowana znak % i następujący po nim opis pola - oczekiwana jest dana określonego rodzaju i formatu. Jeżeli tekst nie będzie odpowiadał formatowi, odczyt zostanie przerwany. inny znak - na wejściu oczekiwany jest dokładnie ten znak, jeżeli pojawi się inny, odczyt zostanie przerwany. Przerwanie odczytu oznacza, że pozostałe znaki, począwszy od pierwszego niepasującego, pozostają nadal na wejściu Przykłady stringu formatu: "%f PLN" // np.: "345.4 PLN" "%2d-%2d-%4d" // np.:
57 Opis pola w formacie scanf % [*] [szerokość] [rozmiar] typ Typ - element obowiązkowy pola informujący o rodzaju odczytywanej wartości (np. czy jest to liczba dziesiętna czy szesnastkowa, całkowita czy zmiennoprzecinkowa, czy może ciąg znaków). Pola opcjonalne: * - odczytanie wartości pola bez zapisu do pamięci, Nie należy podawać wskaźnika dla tego pola Szerokość - maksymalna interpretowana liczba znaków dla pola Rozmiar - informuje o rozmiarze zmiennej przeznaczonej do zapisu pola (np. short/long lub float/double) 206
58 Wprowadzanie znaków Kod pola: c Odpowiedni wskaźnik powinien być typu char *. Przykłady: char plec; printf("podaj płeć (K/M): "); scanf ("%c", &plec); // & - pobranie adresu Podany przez użytkownika znak zostanie umieszczony w zmiennej plec. char kod[4]; printf("podaj 4-znakowy kod: "); scanf ("%4c", kod); Podany przez użytkownika 4-znakowy kod zostanie umieszczony począwszy od wskaźnika kod. Na końcu nie zostanie umieszczony znak '\0' 207
59 Wprowadzanie stringów Kod pola: s Odpowiedni wskaźnik funkcji musi być typu char * i wskazywać na pobrany od systemu fragment pamięci (tablicę). Wczytane zostaną wszystkie znaki aż do pierwszego napotkanego odstępu (spacja, tabulacja lub nowa linia). Na końcu automatycznie dołączony zostanie znak '\0'. Przykład: char nazwisko[20]; scanf ("%19s", nazwisko); // max 19 znaków 208
60 Wprowadzanie liczb całkowitych Kod pola d: liczba całkowita dziesiętna, może zawierać znak +/-. Wskaźnik powinien być typu int * Kod poda u: nieujemna liczba dziesiętna (unsigned) Wskaźnik powinien być typu unsigned int * Kod poda x lub X: liczba całkowita szesnastkowa Wskaźnik powinien być typu int * Kod poda o : liczba całkowita ósemkowa Wskaźnik powinien być typu int * Dla wszystkich powyższych rodzajów pól, podanie przez użytkownika kropki dziesiętnej lub innego nieodpowiedniego znaku zakończy odczyt pola 209
61 Wprowadzanie liczb rzeczywistych Kod pola e, E, f, g, G: Liczba rzeczywista w dowolnej notacji. Może zawierać: - znak +/-, - kropkę dziesiętną, - znak E lub e, po którym powinna występować liczba całkowita (która również może zawierać znak +/-) 210
62 Rozmiar argumentu Element ten pozwala sprecyzować liczbę bitów, na jakiej zapisana zostanie odczytana wartość. W przypadku niesprecyzowania rozmiaru, domyślnymi typami danych są int (pola d, o), unsigned int (pola u, x, X), oraz float (pola e, E, f, g, G) Oznaczenie: h: Dla pól (d, o, u, x, X) - (unsigned) short int l: Dla pól (d, o, u, x, X) - (unsigned) long int Dla pól (f, e, E, g, G) - double L: Dla pól (f, e, E, g, G) - long double Przykład: unsigned long int liczba; printf ("Podaj dużą liczbę całkowitą:"); scanf("%lu", &liczba); scanf("%u", &liczba); // Zapis połowy bitów! 211
63 Przykłady użycia scanf int i,n; float f, wsp[3]; char tab[10]; printf ("Podaj liczbę całkowitą:"); scanf("%d", &i); printf ("Podaj współrzędne 3D:"); scanf("%f, %f, %f", wsp, wsp+1, wsp+2); float tab[3]; printf ("Podaj 1-3 liczb (na końcu 'x')"); n=scanf("%f %f %f", tab, tab+1, tab+2); printf ("Podałeś %d liczb!\n", n); 212
64 Funkcje pochodne od scanf Odczyt sformatowanego tekstu ze stringu: int sscanf(char *buf, char *format,...); buf wskazuje na początek interpretowanego tekstu, który powinien być zakończony znakiem '\0' Odczyt sformatowanego tekstu z podanego strumienia: int fscanf(file *strumień, char *format,...); UWAGA! Strumień (np. plik na dysku) musi być uprzednio otwarty. 213
65 printf ("Dziękuję za %s i ", "uwagę"); printf ("zapraszam na %d egzamin.\n", 1); czyli... Dziękuję za uwagę i zapraszam na 1 wykład. 214
66 DYNAMICZNA ALOKACJA PAMIĘCI, REFERENCJE, REKURENCJA 215
67 Zapotrzebowanie na pamięć W wielu programach nie ma możliwości przewidzenia (na etapie projektowania) ilości przetwarzanych danych,np.: Baza danych - dowolna liczba rekordów, Obróbka grafiki i dźwięku - nieznane rozmiary pliku. Zapotrzebowanie na pamięć jest w wielu sytuacjach teoretycznie nieograniczone. Projektant lub programista musi jednak na etapie tworzenia programu poczynić pewne założenia. W przypadku wykorzystania statycznych struktur danych (np. zwykła tablica), niezbędne jest określenie maksymalnego rozmiaru danych już podczas kodowania. Deklaracja nadmiarowej tablicy powoduje, że pamięć nie jest wykorzystana w sposób efektywny.
68 Przykład danych statycznych Program ma przetwarzać kwoty transakcji finansowych firmy z ostatniego roku. Deklaracja tablicy statycznej: #define MAX 1000 // wartość arbitralna! float kwoty[max]; Dobór wartości MAX bardzo rzadko okaże się trafny, w zależności od firmy i roku: Transakcji może być więcej niż MAX, np. 1005: - program przestaje spełniać swoje funkcje, - wyjście z błędem (przy braku zabezpieczenia) Transakcji może być dużo mniej niż MAX, np. 90: - niepotrzebnie zajęta pamięć. Nie ma przy tym znaczenia czy tablica jest globalna czy lokalna, ponieważ zawsze trzeba przy jej tworzeniu podać rozmiar. 217
69 Co to jest alokacja pamięci? Każdy program potrzebuje pewnej ilości pamięci do przechowywania swojego kodu stosu wartości stałych (np. wypisywanych tekstów) wartości zmiennych (statycznych) Ilość ta jest znana w chwili ładowania programu, Następuje wtedy żądanie przydziału (alokacji) pamięci od systemu operacyjnego. Jeżeli brakuje pamięci, program się nie uruchamia. Program może również żądać przydziału dodatkowej pamięci od systemu operacyjnego (dynamiczna alokacja pamięci) Przydzielona pamięć powinna być zwolniona przez program przed jego zakończeniem 218
70 Alokacja dynamiczna: operator new Operator jednoargumentowy (nie funkcja!) new wymaga podania typu danej, jaka ma być umieszczona w pamięci,np.: new typ (np. new int) Rozmiar przydzielonej pamięci zależy od podanego typu i jest określany automatycznie W odpowiedzi new generuje wskaźnik, którego wartość wskazuje otrzymane miejsce w pamięci, a typ wskaźnika odpowiada typowi podanemu jako operand, np.: int *wsk = new int; // wskaźnik na int Przydział pamięci może się nie powieść! Operator new zwraca w takim przypadku wskaźnik zerowy (NULL). Należy zawsze sprawdzić czy alokacja się powiodła. Zaniedbanie może prowadzić do katastrofalnych skutków. 219
71 Cechy zmiennych dynamicznych Zmienna taka nie ma nazwy, dostępna jest tylko poprzez wskaźnik Zmienna istnieje od chwili alokacji do chwili zwolnienia pamięci Zakres dostępności zmiennej jest podobny do zmiennych statycznych (czyli wszędzie), pod warunkiem, że dostępny jest wskaźnik do tej zmiennej Zmienna nie jest inicjalizowana automatycznie, może zawierać "śmieci" Przydział pamięci odbywa się z tzw. sterty (ang. heap), której maksymalny rozmiar jest często jedną z opcji projektu w kompilatorze 220
72 Rozmieszczenie danych w pamięci W przypadku danych tworzonych dynamicznie, w pamięci programu znajdują się wskaźniki, a właściwe dane - w pamięci przydzielonej od systemu operacyjnego. Zmienne przydzielone przez system w kolejnych alokacjach mogą fizycznie znajdować się w odległych miejscach pamięci Pamięć programu wskaźnik 1 Pamięć przydzielana dynamicznie zmienna 1 wskaźnik 2 zmienna 3 wskaźnik 3 zmienna 2 221
73 Zwolnienie pamięci: operator delete Pamięć pobrana dynamicznie powinna zostać zwolniona przed zakończeniem programu. Służy do tego operator (nie funkcja) jednoargumentowy delete, który wymaga podania wskaźnika na wcześniej zaalokowaną pamięć, np.: int *wsk = new int; // alokacja // tu korzystamy z danej *wsk delete wsk; // zwolnienie Operator delete nie zwraca żadnego wyniku (typ void) 222
74 Zwolnienie pamięci - problemy Zaniechanie zwolnienia pamięci powoduje, że przydzielony jej fragment pozostaje niedostępny dla innych programów aż do restartu systemu operacyjnego Po zwolnieniu pamięci nie wolno już korzystać z danej zapisanej pod adresem zapisanym we wsk! Ten fragment pamięci już do nas nie należy! W szczególności nie wolno tej zmiennej powtórnie zwolnić. Jako argument dla delete wolno podać wyłącznie wartość wskaźnika, który wskazuje na pamięć przydzieloną dynamicznie. Zwolnienie pamięci jeżeli wskaźnik wynosi NULL (0) nie spowoduje katastrofy (system wykryje nieprawidłowość i nie wykona zwolnienia pamięci) Dobrym pomysłem może być więc ustawianie wskaźnika na wartość NULL natychmiast po zwolnieniu pamięci. 223
75 Korzystanie z danych dynamicznych Ponieważ dostęp do pobranej pamięci istnieje poprzez wskaźnik, w celu dostępu do wartości zmiennej należy korzystać z operatora * lub [], np.: int *wsk = new int; if (wsk!=null) // czy przydzielono pamięć? { } cin >> *wsk; cout << "Podana wartość: " << wsk[0]; cout << "Do kwadratu: " >> (*wsk) * (*wsk); delete wsk; // zwolnienie pamięci else // alokacja nie powiodła się cout << "Brak pamięci!\n"; 224
76 Utrata dostępu do danej Wskaźnik zwrócony przez operator new, jest jedynym łącznikiem z pobranym miejscem pamięci, a więc również z daną, która tam się znajduje. W przypadku zniszczenia wartości tego wskaźnika niemożliwe jest: korzystanie z tego fragmentu przydzielonej pamięci odczyt i zapis danej, która tam jest zapisana zwolnienie pobranej pamięci Przykład: int *wsk = new int; // pierwszy fragment pamięci *wsk=10; wsk = new int; // drugi fragment pamięci // utraciliśmy dostęp do fragmentu pierwszego *wsk=20; delete wsk; 225
77 Inicjalizacja zmiennej dynamicznej Podczas tworzenia zmiennej dynamicznej można od razu podać jej wartość Składnia new typ(wartość) Przykład int *iw=new int(20); cout << *iw; // 20 float *fw=new float(-2.5); cout << *fw; //
78 Alokacja pamięci na strukturę W przypadku danych prostych (jak int lub float), sens dynamicznej alokacji jest wątpliwy: i tak trzeba tworzyć daną statyczną (wskaźnik) zużycie pamięci wzrasta (miejsce na wskaźnik i daną) Swoją wartość okazuje dynamiczna alokacja w przypadku danych złożonych, np.: struct Duza { //tu duża liczba pól - potrzeba sporo pamięci }; Duza * wsk = new Duza; W tym przypadku jedyną daną statyczną jest wskaźnik wsk, natomiast liczne dane znajdują się w pamięci przydzielonej dynamicznie 227
79 Dostęp do składników struktury (1) Dostęp za pomocą operatora. struct Zespolona { float re, im; }; Zespolona * z = new Zespolona; if (z!=null) { // przydzielono pamięć (*z).re=10; // nawias konieczny! (*z).im=20; cout << (*z).re << "+"<< (*z).im << "i\n"; delete z; } else // alokacja nie powiodła się cout << "Brak pamięci!\n"; 228
80 Dostęp do składników struktury (2) Dostęp za pomocą operatora -> struct Zespolona { float re, im; }; Zespolona * z = new Zespolona; if (z!=null) { // przydzielono pamięć z->re=10; z->im=20; cout << z->re << "+"<< z->im << "i\n"; delete z; } else // alokacja nie powiodła się cout << "Brak pamięci!\n"; 229
81 Tablica zmiennych dynamicznych (1) Jeżeli trzeba utworzyć pewną liczbę zmiennych w sposób dynamiczny, można wykorzystać statyczną tablicę wskaźników Pamięć programu Pamięć systemu operacyjnego T[0] T[1] T[2] T[3] T[4] T[5] T[6] T[7] T - tablica wskaźników zmienna zmienna zmienna zmienna zmienna zmienna zmienna zmienna 230
82 Tablica zmiennych dynamicznych (2) struct Zespolona { float re, im; }; Zespolona *z[10]; // tablica wskaźników int blad=0; // znacznik błędu for (int i=0; i<10; i++) { z[i]=new Zespolona; // utworzenie zmiennej i if (z[i]==null) blad=1; } if (!blad) { // tutaj można wykorzystać utworzone zmienne,np z1[5]->re=10; z1[5]->im=2; // liczba 10-2i cout << z1[5]->re << "+" << z1[5]->im << "i\n"; } else cout << "Brak pamięci!\n"); for (int i=0;i<10; i++) if (z[i]!=null) delete z[i]; 231
83 Dynamiczna alokacja tablicy Dynamiczne utworzenie tablicy : wskaźnik=new typ[rozmiar]; Operator new generuje w tym przypadku również wskaźnik do typu typ, z tym że przydzielany jest obszar pamięci pozwalający zapisać rozmiar danych typu typ. Przykład int *tab=new int[10]; - tablica 10 int'ów Nie ma możliwości inicjalizacji takiej tablicy Programista musi być świadom czy wskaźnik wskazuje na jedną daną czy na pierwszą daną z tablicy (i pamiętać rozmiar) Ze wskaźnika można korzystać w identyczny sposób jak ze "zwykłej" tablicy - z użyciem operatora * lub [] Zwolnienie tablicy utworzonej dynamicznie odbywa się za pomocą konstrukcji: delete [] wskaźnik; 232
84 Alokacja tablicy - przykłady int *wsk, *tab; wsk=new int; tab=new int[20]; // ten sam typ wskaźnika dla // zmiennej prostej i tablicy *wsk = 10; // wstawienie wartości *tab = 10; // zerowy element tablicy *(tab+1)=11; wsk[0]=20; tab[0]=20; tab[1]=1; tab[19]=100; wsk[1]=10; delete wsk; delete [] tab; // pierwszy element tablicy // poprawne ale mylące // zerowy element tablicy // pierwszy element tablicy // ostatni element tablicy // Błąd! To nie nasza pamięć! 233
85 Alokacja tablicy - rozmieszczenie Struktury danych dla następujących zmiennych: int *T=new int[8]; Pamięć programu T wskaźnik na int Pamięć systemu operacyjnego T[0] T[1] T[2] T[3] T[4] T[5] T[6] T[7] tablica 8 zmiennych typu int 234
86 Przykład alokacji tablicy int ile; cout << "Podaj liczbę danych: "; cin >> ile; float *tab=new float[ile]; // zmienny rozmiar!!! if (tab!=null) { for (int i=0; i<ile; i++) { cout << "Podaj wartość " << i << ": "; cin >> tab[i]; // wprowadzenie danych } // tu można korzystać z podanych liczb delete [] tab; } else cout << "Brak pamięci!\n"; 235
87 Referencje Referencja jest typem pochodnym łączącym pewne cechy typu bazowego oraz wskaźnika (nie ma tylko analogii do tablicy!) Referencje nie występują w języku C, tylko w C++, C#, Javie Można ją rozumieć jako przezwisko (alias) pewnej już istniejącej zmiennej. Referencja zawiera w sobie adres i typ tej zmiennej ale nie wymaga stosowania operatora * (jak wskaźnik), "na oko" wygląda w programie jak zwykła zmienna Składnia deklaracji: typ & nazwa_referencji; Przykład void main() { int a=0,b=0; int &ref=a; ref=10; // ref=10 i a=10!!! ref=b; // ref=0, a=0 ref=20; // ref=20 i a=20 (b=0) } 236
88 Referencje jako parametr funkcji Sens użycia referencji jako parametru jest podobny jak wskaźnika (poza przesyłaniem tablic), tyle że dostęp do zmiennej jest wygodniejszy (nie wymaga użycia operatorów *) Wywołując funkcję trzeba pamiętać, że może ona zmienić wartość zmiennej (w wywołaniu tego nie widać) Przykład: void plusminus(int *tab, int n, int &plus, int &minus) { plus=0, minus=0; // zerujemy referencje for (int i=0; i<n; i++) if (tab[i]>0) plus++; else minus++; } // plus i minus obliczone void main() { int tablica[20], ileplus, ileminus; plusminus(tablica, 20, ileplus, ileminus); } 237
89 Referencje - uwagi Podobnie jak wskaźnik, referencja zawsze wskazuje na jakieś miejsce w pamięci, nawet jeśli zmienna nie została w programie zainicjowana. Użycie takiej referencji jest niebezpieczne. Należy pamiętać o tym, że referencja jest przezwiskiem jakiejś innej zmiennej i jej zmiana powoduje również zmiany tamtej zmiennej. Referencję należy zainicjować przypisując jej zmienną, później można podstawiać również zwykłe wyrażenia, np.: void plus5(int &liczba) { liczba+=5; // zwiększamy podaną zmienną o 5 } Wywołania: int a; plus5(a); // podajemy zmienną a plus5(a+1); // błąd, a+1 to nie zmienna plus5(10); // bład, 10 to nie zmienna 238
90 Referencja na wskaźnik Skoro można utworzyć referencję do zwykłej zmiennej, to można i do wskaźnika: Składnia: typ * & nazwa_referencji; Przykład: void main() { int a,b, *wsk1; int *& refwsk=wsk1; wsk1=&a; // wsk1 i refwsk wskazują na a refwsk= &b; // wsk1 i refwsk wskazują na b } 239
91 Rekurencja W niektórych zagadnieniach występuje potrzeba wywołania funkcji przez nią samą, np.: void odliczaj(int n) { cout << n <<endl; } if (n>0) odliczaj(n-1); // rekurencja Podczas każdego wywołania rekurencyjnego tworzony jest na stosie oddzielny zestaw zmiennych lokalnych (tutaj zmienna n) Należy zawsze pamiętać o zdefiniowaniu warunku zakończenia rekurencji, inaczej funkcja będzie wywoływać się w nieskończoność (w końcu zapychając pamięć) 240
92 Rekurencja - silnia Wzór rekurencyjny: n! = n* (n-1)!, n>1; 0!=1!=1. long silnia(short n) { if (n>0) return n*silnia(n-1); else } return 1; Wzór iteracyjny: n! = n*(n-1)*...*2*1, n>1; 0!=1!=1. long silnia(short n) { long sil=1; for (;n>0;n--) sil*=n; return sil; } 241
93 Rekurencja - ciąg Fibonacciego Wzór rekurencyjny na wyraz k ciągu Fibonacciego: Fib(k) = Fib(k-1) + Fib(k-2), k>2; Fib(1)=Fib(2)=1. Ciąg: unsigned long Fib(unsigned short k) { if (k>2) return Fib(k-1)+Fib(k-2); else } return 1; 242
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()
Bardziej szczegółowoProgramowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,
Bardziej szczegółowoStałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można
Bardziej szczegółowoJęzyki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.
Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym
Bardziej szczegółowoINFORMATYKA Studia Niestacjonarne Elektrotechnika
INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl
Bardziej szczegółowoPodstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Bardziej szczegółowoMETODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne
Bardziej szczegółowoZmienne, stałe i operatory
Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe
Bardziej szczegółowo2 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania
Bardziej szczegółowoTemat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Bardziej szczegółowoPodstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Bardziej szczegółowo1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Bardziej szczegółowo1. Wprowadzanie danych z klawiatury funkcja scanf
1. Wprowadzanie danych z klawiatury funkcja scanf Deklaracja int scanf ( const char *format, wskaźnik, wskaźnik,... ) ; Biblioteka Działanie stdio.h Funkcja scanf wczytuje kolejne pola (ciągi znaków),
Bardziej szczegółowoZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Bardziej szczegółowo#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 ); }
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Bardziej szczegółowoWykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++
Podstawy programowania Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++ 1 dr Artur Bartoszewski - Podstawy programowania, sem. 1- WYKŁAD Część I Wstęp do struktur danych: Tablice 2
Bardziej szczegółowodr inż. Paweł Myszkowski Wykład nr 8 (22.04.2015)
dr inż. Paweł Myszkowski Politechnika Białostocka Wydział Elektryczny Elektronika i Telekomunikacja, semestr II, studia stacjonarne I stopnia Rok akademicki 2014/2015 Wykład nr 8 (22.04.2015) Plan prezentacji:
Bardziej szczegółowoWskaźniki. Informatyka
Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą
Bardziej szczegółowoWstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
Bardziej szczegółowoPodstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++
Podstawy Informatyki Inżynieria Ciepła, I rok Wykład 10 Kurs C++ Historia Lata 70-te XX w język C (do pisania systemów operacyjnych) "The C programming language" B. Kernighan, D. Ritchie pierwszy standard
Bardziej szczegółowoCzęść 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Bardziej szczegółowoOPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Bardziej szczegółowo1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.
1. Pierwszy program // mój pierwszy program w C++ #include using namespace std; cout
Bardziej szczegółowoJęzyk C zajęcia nr 11. Funkcje
Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji
Bardziej szczegółowoPliki. Informacje ogólne. Obsługa plików w języku C
Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego
Bardziej szczegółowoWskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady
Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to
Bardziej szczegółowo1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami
1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.
Bardziej szczegółowoWstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe
Wstęp do programowania obiektowego Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe 1 PRZEKAZYWANIE PARAMETRÓW DO FUNKCJI W C++ 2 W C++
Bardziej szczegółowoutworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Bardziej szczegółowoJĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6
JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona
Bardziej szczegółowo#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Bardziej szczegółowo> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki
> C++ dynamiczna alokacja/rezerwacja/przydział pamięci Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1429536600 > Dzisiejsze zajęcia sponsorują słówka: new oraz delete
Bardziej szczegółowoStruktury, unie, formatowanie, wskaźniki
Struktury, unie, formatowanie, wskaźniki 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12, na rzecz swoich 143209 poddanych uchwalił dekret o 20 procentowej
Bardziej szczegółowoFunkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów
Funkcje. Spotkanie 5 Dr inż. Dariusz JĘDRZEJCZYK Tworzenie i używanie funkcji Przekazywanie argumentów do funkcji Domyślne wartości argumentów Przeładowanie nazw funkcji Dzielenie programu na kilka plików
Bardziej szczegółowoDYNAMICZNE PRZYDZIELANIE PAMIECI
DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne
Bardziej szczegółowoBiblioteka standardowa - operacje wejścia/wyjścia
Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline
Bardziej szczegółowoZmienne i struktury dynamiczne
Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest
Bardziej szczegółowoFormatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.
Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście. wer. 10 z drobnymi modyfikacjami! Wojciech Myszka 2018-03-27 09:06:38 +0200 Część I Formatowane (tekstowe) wejście/wyjście Otwarcie pliku
Bardziej szczegółowoISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje
Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych
Bardziej szczegółowoStałe i zmienne znakowe. Stała znakowa: znak
Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby
Bardziej szczegółowoJęzyk C++ zajęcia nr 2
Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator
Bardziej szczegółowoArgumenty wywołania programu, operacje na plikach
Temat zajęć: Argumenty wywołania programu, operacje na plikach Autor: mgr inż. Sławomir Samolej Zagadnienie 1. (Zmienne statyczne) W języku C można decydować o sposobie przechowywania zmiennych. Decydują
Bardziej szczegółowoWykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VII Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Kompilacja Kompilator C program do tłumaczenia kodu źródłowego na język maszynowy. Preprocesor
Bardziej szczegółowoWYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński
WYKŁAD 8 Funkcje i algorytmy rekurencyjne Proste przykłady Programy: c3_1.c..., c3_6.c Tomasz Zieliński METODY REKURENCYJNE (1) - program c3_1 ======================================================================================================
Bardziej szczegółowoTablice (jedno i wielowymiarowe), łańcuchy znaków
Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie
Bardziej szczegółowoInformatyka, Ćwiczenie 1. 1. Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu
Informatyka, Ćwiczenie 1 1. Uruchomienie Microsoft Visual C++ I. ZałoŜenie nowego projektu Wybieramy menu: File>New>Files jak na rys. poniŝej Zapisujemy projekt pod nazwą LAN, w katalogu d:\temp\lab typu
Bardziej szczegółowoProgramowanie strukturalne i obiektowe
Programowanie strukturalne i obiektowe Język C część I Opracował: Grzegorz Flesik Literatura: A. Majczak, Programowanie strukturalne i obiektowe, Helion, Gliwice 2010 P. Domka, M. Łokińska, Programowanie
Bardziej szczegółowoPROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec
PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty
Bardziej szczegółowoObsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Obsługa plików Kraków 2013 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim będziemy mogli
Bardziej szczegółowoWstęp do programowania. Wykład 1
Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.
Bardziej szczegółowoC++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
Bardziej szczegółowoLaboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH
Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 1 Podstawy Wprowadzenie do programowania w języku C Kraków 2010 Twój pierwszy program w C Program w języku C, jak i w wielu innych językach
Bardziej szczegółowoJęzyki i metodyka programowania. Wprowadzenie do języka C
Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia
Bardziej szczegółowoKURS C/C++ WYKŁAD 1. Pierwszy program
KURS C/C++ WYKŁAD 1 Pierwszy program Tworzenie programu odbywa sie w dwóch etapach: 1. opracowanie kodu źródłowego 2. generowanie kodu wynikowego Pierwszy etap polega na zapisaniu algorytmu za pomocą instrukcji
Bardziej szczegółowoPodstawy programowania w C++
Podstawy programowania w C++ Strumienie wejścia cin>> i wyjścia cout
Bardziej szczegółowoFunkcje zawarte w bibliotece < io.h >
PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece
Bardziej szczegółowoPROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
Bardziej szczegółowoLab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Bardziej szczegółowoIMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Bardziej szczegółowoProgramowanie strukturalne i obiektowe. Funkcje
Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy
Bardziej szczegółowoWstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.
Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy
Bardziej szczegółowo1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE
1. Proste typy danych- ciąg dalszy 2. Typy złożone danych : TABLICE Wykład 3 ZMIENNE PROSTE: TYPY WBUDOWANE Typy zmiennoprzecinkowe: float double long double Różne rozmiary bajtowe. W konsekwencji różne
Bardziej szczegółowoCo to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).
Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154
Bardziej szczegółowoKURS C/C++ WYKŁAD 6. Wskaźniki
Wskaźniki KURS C/C++ WYKŁAD 6 Każda zmienna ma unikalny adres wskazujący początkowy obszar pamięci zajmowany przez tą zmienną. Ilość pamięci zajmowanej przez zmienną zależy od typu zmiennej. Adres można
Bardziej szczegółowoTablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1
Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).
Bardziej szczegółowoFunkcje zawarte w bibliotece < io.h >
PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece
Bardziej szczegółowoJęzyk ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Bardziej szczegółowoSpis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal
Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO Rozdział 1. Wybór i instalacja kompilatora języka Pascal 1.1. Współczesne wersje kompilatorów Pascala 1.2. Jak zainstalować
Bardziej szczegółowoInformatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
Bardziej szczegółowoStrona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.
Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice
Bardziej szczegółowoJęzyki i metody programowania. Omówienie języków C, C++ i Java
Języki i metody programowania Omówienie języków C, C++ i Java Język C Język programowania ogólnego przeznaczenia Historia: M. Richards - BCPL - lata 60-te ubiegłego stulecia K. Thompson - B dla UNIX (DEC
Bardziej szczegółowoLaboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski
Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje
Bardziej szczegółowoWstęp do programowania
wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych
Bardziej szczegółowoJęzyki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński
Języki programowania Część siódma Przetwarzanie plików amorficznych Konwencja języka C Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie
Bardziej szczegółowoPodstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia
Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka
Bardziej szczegółowoProste typy zmiennych języka C++ *) Zapis 3.4 e-38 jest równoważny zapisowi 3,
WYKŁAD 1. PODSTAWY 1_1. Typy zmiennych Proste typy zmiennych języka C++ Nazwa typu (nazwa skrócona) Rozmiar (bajtów) unsigned char 1 signed char (char) unsigned short int (unsigned) signed short int (int)
Bardziej szczegółowoISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje
Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych
Bardziej szczegółowoOperacje wejścia/wyjścia odsłona pierwsza
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Bardziej szczegółowoZadanie nr 2: Arytmetyka liczb zespolonych
Zadanie nr 2: Arytmetyka liczb zespolonych 1 Cel ćwiczenia Wykształcenie umiejętności definiowania przeciążeń operatorów arytmetycznych dwuargumentowych i jednoargumentowych dla własnych struktur danych
Bardziej szczegółowoĆwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.
Laboratorium Podstaw Informatyki Strona 1 Laboratorium Podstaw Informatyki Kierunek Elektrotechnika Ćwiczenie 4 Obsługa plików Kraków 2010 Laboratorium Podstaw Informatyki Strona 2 Obsługa plików Zanim
Bardziej szczegółowoFunkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych
Funkcje standardowej biblioteki wejść-wyjść do wyświetlania i pobierania danych Przykłady wykorzystanie funkcji printf i scanf do wyświetlania danych na wyświetlaczu LCD oraz komunikacji sterownika mikroprocesorowego
Bardziej szczegółowoJak napisać program obliczający pola powierzchni różnych figur płaskich?
Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy
Bardziej szczegółowoTypy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1
Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy
Bardziej szczegółowoJęzyk C i C++. Podstawy. Zagadnienia do opanowania. Przykład 1. (modyfikuj kod, aby zrealizować punkty 5., 7.)
Język C i C++. Podstawy Materiały do samodzielnego opanowania, ale także propozycja zadań na zajęcia laboratoryjne Zagadnienia do opanowania 1) Czym jest standardowe wejście-wyjście (stdio)? 2) Czym może
Bardziej szczegółowoPytania sprawdzające wiedzę z programowania C++
Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?
Bardziej szczegółowoIX. Wskaźniki.(3 godz.)
Opracowała: dr inż. Anna Dubowicka Uczelniane Centrum Komputerowe PK IX. Wskaźniki.(3 godz.) Wskaźnik jest zmienną, która zawiera adres innej. 1. Definiowanie wskaźników. typ * nazwa ; gdzie: znak * informuje
Bardziej szczegółowoPodstawy programowania 1
Podstawy programowania 1 Krzysztof Grudzień kgrudzi@kis.p.lodz.pl Wykład nr 2 1 Plan spotkań Wskaźniki Tablice jednowymiarowe & wska źniki. Programowanie w C. Wikibooks 2 Co to jest wskaźnik?? Wskaźnik
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowomain( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!
Funkcja wysoce niezależny blok definicji i instrukcji programu (podprogram) Każdy program napisany w języku C/C++ zawiera przynajmniej jedną funkcję o predefiniowanej nazwie: main( ). Najczęściej wykorzystuje
Bardziej szczegółowotablica: dane_liczbowe
TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica
Bardziej szczegółowowykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis
i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje
Bardziej szczegółowo1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Bardziej szczegółowoPARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
Bardziej szczegółowoPodstawy programowania. Wykład 2 Zmienne i obsługa wejścia/wyjścia. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład 2 Zmienne i obsługa wejścia/wyjścia Krzysztof Banaś Podstawy programowania 1 Programowanie Programowanie typowe kroki zapis kodu źródłowego w pliku tekstowym kompilacja usuwanie
Bardziej szczegółowoProgram wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:
Rozdział 1 Obsługa plików W językach C pliki powiązane są ze strumieniami i pracuje się na nich podobnie jak na innych strumieniach. W języku C do operacji na plikach służą funkcje z biblioteki stdio.h,
Bardziej szczegółowoProgramowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop
Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop. 2010 Spis treści Wstęp 11 Część I PASCAL - wprowadzenie do programowania strukturalnego
Bardziej szczegółowoI - Microsoft Visual Studio C++
I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i
Bardziej szczegółowoStruktury Struktura polami struct struct struct struct
Struktury Struktura jest zbiorem zmiennych występujących pod wspólna nazwą. Zmienne wchodzące w skład struktury nazywane są polami lub elementami, a czasem członkami struktury. Struktury używamy, jeśli
Bardziej szczegółowoXV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.
XV. Wskaźniki 15.1. Odczytywanie adresu pamięci istniejących zmiennych Język C++ w bardzo łatwy sposób umoŝliwia nam pobieranie adresu pamięci wybranych zmiennych. Wskaźnik zajmuje zazwyczaj 4 bajty bez
Bardziej szczegółowo