Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

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

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

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

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

Język C zajęcia nr 11. Funkcje

2 Przygotował: mgr inż. Maciej Lasota

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

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

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

MATERIAŁY DO ZAJĘĆ II

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Podstawy programowania w języku C

Programowanie w elektronice: Podstawy C

Programowanie strukturalne i obiektowe

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 2 Zmienne i obsługa wejścia/wyjścia. Krzysztof Banaś Podstawy programowania 1

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

Zmienne, stałe i operatory

1 Podstawy c++ w pigułce.

Programowanie strukturalne język C - wprowadzenie

Podstawy programowania w języku C i C++

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

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

PROGRAMOWANIE w C prolog

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

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

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

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

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

1 Podstawy c++ w pigułce.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

KURS C/C++ WYKŁAD 6. Wskaźniki

Wstęp do programowania

Wstęp do Programowania, laboratorium 02

Język C - podstawowe informacje

Microsoft IT Academy kurs programowania

Programowanie Komputerów

1. Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C, WNT, Warszawa 1998.

Podstawy programowania

Program w C. wer. 10 z drobnymi modyfikacjami! Wojciech Myszka :28:

Język ludzki kod maszynowy

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Podstawy Programowania C++

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Podstawy programowania w języku C++

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

Kompilator języka C na procesor 8051 RC51 implementacja

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

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

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Programowanie komputerowe. Zajęcia 4

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

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Inżynieria Wytwarzania Systemów Wbudowanych

Programowanie obiektowe

KURS C/C++ WYKŁAD 7. struct Punkt { int x, y; int kolor; };

Program w C. wer. 12 z drobnymi modyfikacjami! Wojciech Myszka :59:

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Podstawy programowania C. dr. Krystyna Łapin

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

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

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

ROZDZIAŁ 2. Operatory

Część 4 życie programu

Języki programowania - podstawy

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

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

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

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

Algorytmy i struktury danych. wykład 1

Wprowadzenie do języka Java

Python wstęp do programowania dla użytkowników WCSS

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

Wstęp do wskaźników w języku ANSI C

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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

1 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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

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

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

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05

Materiały pomocnicze do wykładu 3 - Elementy języka Java

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wstęp do programowania 1

Lab 9 Podstawy Programowania

Wykład 1

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Transkrypt:

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia Krzysztof Banaś Podstawy programowania 1

Typy danych Podstawowe wbudowane typy danych języka C: _Bool 0 i 1 (C99) znaki (char) 7 bitów dla znaków ASCII liczby całkowite (int), od INT_MIN do INT_MAX (z <limits.h>) liczby rzeczywiste (zmiennoprzecinkowe) pojedynczej (float), podwójnej (double) i rozszerzonej (long double) precyzji (standardy IEEE) liczby zespolone: float _Complex, double _Complex i long double _Complex (C99 opcjonalne) określenia (specyfikatory): short, long, signed, unsigned sugerują jak wiele miejsca w pamięci przeznaczyć na zmienną i czy przeznaczyć jeden z bitów na przechowywanie znaku zmiennej signed char, short int, int, long int, long long int zmienne całkowite ze znakiem dla każdego typu ze znakiem istnieje odpowiednik bez znaku unsigned Krzysztof Banaś Podstawy programowania 2

Stałe Stałe typu całkowitego (oprócz standardowych): long np. 2L unsigned np. 12u unsigned long np. 25UL Zapis stałych typu całkowitego standardowy jak wyżej ósemkowy (octal) 037 == 31 szesnastkowy (hexadecimal) 0x1F == 31 0 na początku zawsze oznacza notację ósemkową, a 0x notację szesnastkową (możliwe warianty long, unsigned) 0xFUL == 15UL Stałe typu znakowego małe liczby całkowite, zapisane w specyficznej notacji 'x' '0' == 48 escape sequences np. '\b', '\n' '\t', '\\', '\?', '\"', '\'' zapis ósemkowy: '\170', zapis szesnastkowy: '\x5d' Krzysztof Banaś Podstawy programowania 3

Stałe Stałe napisowe "Hello world\n" tablice znaków zakończone znakiem NULL - '\0' długość napisu (np. zwracana przez funkcję strlen) zazwyczaj nie obejmuje '\0' alokacja pamięci do przechowywania napisu musi to uwzględniać "x"!= 'x' Stałe typu zmiennoprzecinkowego float 3.14f double 3.14 long double 3.14L Wyrażenia stałe wyrażenia zbudowane wyłącznie ze stałych 3.14+1 wyrażenia stałe zazwyczaj obliczane są w trakcie kompilacji Krzysztof Banaś Podstawy programowania 4

Wyliczenia Standard C wprowadza wyliczeniowy typ zmiennych enum typ enum definiuje zestaw symboli, które mogą być traktowane jak wyliczenie możliwych wartości, np. enum dni_tygodnia{ Poniedzialek, Wtorek, Sroda,...} każda zmienna zdefiniowana za pomocą enum jest nazwaną stałą, która zamieniana jest na liczbę całkowitą domyślnie jest to kolejna liczba pozycja symbolu w wyliczeniu: Poniedziałek == 0, Wtorek == 1, itd. można jawnie nadać wartości podstawianych liczb enum dni_tygodnia{ Poniedzialek=1, Wtorek=2, Sroda=3,...} Poniedziałek == 1, Wtorek == 2, itd. można także podać konkretną wartość dla wybranych stałych, i wtedy kolejne otrzymają kolejne liczby całkowite enum dni_tygodnia{ Poniedzialek=1, Wtorek, Sroda,...} Poniedziałek == 1, Wtorek == 2, itd. Krzysztof Banaś Podstawy programowania 5

Wyliczenia Użycie typu wyliczeniowego jest alternatywną do #define metodą definiowania nazwanych stałych w programach C zaletą stałych enum jest to, że ich symboliczne nazwy pozostają w programie po kompilacji Zmienne enum często stosuje się w instrukcji wyboru switch: int dzien_tygodnia = 2; // enum dni_tygodnia dzien_tygodnia = Sroda; // = 3; switch(dzien_tygodnia){ case Poniedzialek: printf("poniedzialek\n"); harmonogram_poniedzialkowy(); break; case Wtorek: printf("wtorek\n"); harmonogram_wtorkowy(); break; // itd. } Krzysztof Banaś Podstawy programowania 6

Zmienne stałe(?) Zmienne mogą posiadać określenie const informujące, że ich wartości nie mogą być zmieniane w trakcie wykonania zmienne stałe muszą zostać odpowiednio zainicjowane cont long double PI_L = 3.14159265358979323846; można jako stałe określać całe tablice const char napis[] = "Hello world"; sens użycia określenia const polega na umożliwieniu dokonania odpowiednich optymalizacji przez kompilator kompilator może nawet usunąć zmienną stałą z programu w wersji niezoptymalizowanej zmienna taka zawsze pozostanie, np. w celu umożliwienia debugowania określenia const można używać dla argumentów funkcji kompilator sprawdza, czy zmienne określone jako const (np. wartości w tablicach przekazanych za pomocą wskaźnika) nie są zmieniane wewnątrz funkcji używanie określenia const zwiększa czytelność kodu i odporność na błędy Krzysztof Banaś Podstawy programowania 7

Stałe Określenie const stanowi trzeci (obok #define i enum) sposób określania stałych nazwanych w kodzie źródłowym Zaletą użycia const jest widoczność zmiennych w debugerach, wadą niemożność wymiarowania tablic o stałych rozmiarach Stałe nazwane najczęściej umieszczane są w plikach nagłówkowych pliki nagłówkowe włączane są do wielu plików źródłowych, przez co ich treść jest powielana w wielu jednostkach kompilacji można użyć definicji w jednym z plików źródłowych kodu i deklaracji extern w pliku nagłówkowym wtedy w pliku nagłówkowym nie ma wartości przypisanej stałej lepszym rozwiązaniem jest statyczna zmienna widoczna w pliku umieszczenie statycznej zmiennej w pliku nagłówkowym włączanym do wielu plików, oznacza, że dla każdego pliku źródłowego istnieje odrębna zmienna stała o tej samej wartości Krzysztof Banaś Podstawy programowania 8

Zmienne stałe(?) Stała z użyciem const static const double PI = = 3.14159265358979; Przykład złożonego inicjowania stałej static const char * const dni_tygodnia_tab[] = { "Poniedziałek", \ "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota", "Niedziela" }; dni_tygodnia_tab jest tablicą wskaźników długość jest obliczana i ustalana na podstawie instrukcji inicjowania każdy element tablicy jest wskaźnikiem do tablicy wskaźnik zostaje utożsamiony z tablicą znaków (wartość każdego wskaźnika jest ustalana jako adres pewnej stałej tablicy znaków w pamięci) długość tablicy dla każdego wskaźnika jest obliczana i ustalana na podstawie instrukcji inicjowania wykorzystanie np. printf("trzeci dzień tygodnia: %s\n", dni_tygodnia_tab[2] ); Krzysztof Banaś Podstawy programowania 9

Zmienne stałe(?) Składnia użycia const w przypadku wskaźników decyduje o tym czy niezmienny ma pozostawać wskaźnik czy wskazywana wartość int * const cpi = &i; // stały wskaźnik pokazuje cały czas w to samo miejsce pamięci, które może zmieniać swoją zawartość: cpi++ BŁĄD, (*cpi)++ OK const int * pci = &i; // wskaźnik do stałej wartości może wskazywać na różne miejsca pamięci, ale nie można dokonywać zmian wskazywanych zmiennych poprzez ten wskaźnik pci++ OK, (*pci)++ BŁĄD const int * const cpci = &i; // stały wskaźnik do stałej wartości cpci++ BŁĄD, (*cpci)++ BŁĄD pokazuje cały czas w to samo miejsce pamięci, nie można dokonywać zmian wskazywanych zmiennych poprzez ten wskaźnik Krzysztof Banaś Podstawy programowania 10

Arytmetyka wskaźników Na wskaźnikach można dokonywać następujących operacji arytmetycznych (obok podstawienia: NULL, adresu zmiennej lub wartości innego wskaźnika tego samego typu): zakładając definicje: int a[]; int* pi; int* qi; int n; dodanie (odjęcie) liczby całkowitej do (od) wskaźnika: np. pi+n efekt: jeśli pi == a (&a[0]) to pi+n == &a[n]; uwaga: arytmetycznie wynik operacji zależy od typu wskaźnika dodanie (odjęcie) dwóch wskaźników (wynik typu ptrdiff _t lub size_t) np. qi-pi efekt: jeśli pi == &a[0] i qi = &a[n] to qi-pi == n wynik nie zależy od typu, ale typ a, pi i qi musi być taki sam porównanie wskaźnika do zera (NULL) lub innego wskaźnika np. if(pi<qi){...} // jeśli pi wskazuje na wcześniejszy wyraz niż qi pi i qi muszą być wskaźnikami do wyrazów tej samej tablicy Krzysztof Banaś Podstawy programowania 11

Arytmetyka wskaźników Argument przesłany jako adres (niekoniecznie wartość zmiennej) zostaje skopiowany na stos i wewnątrz wywołanej funkcji traktowany jest jak zmienna wskaźnikowa, na której można wykonywać dopuszczalne operacje: void main ( void) { int a[10]; // a++; // niedozwolone miejsce a jest określone funkcja( a ); } void funkcja( int *wsk_a ){ printf("%d\n", *wsk_a); // *wsk_a== a[0], wsk_a = a wsk_a++; // dozwolone wsk_a jest zmienną na stosie *wsk_a++ // *wsk_a== a[1], wsk_a = a+1 } Krzysztof Banaś Podstawy programowania 12

Arytmetyka wskaźników Arytmetyka wskaźników prowadzi do zwięzłego kodu kod może być trudny do zrozumienia teoretyczny zysk czasowy wynikający z unikania arytmetyki indeksów zazwyczaj jest pozorny optymalizujący kompilator sam dokona odpowiednich modyfikacji przy tłumaczeniu na asembler kod arytmetyki indeksów wydaje się być łatwiejszy w rozumieniu i utrzymaniu Przykład arytmetyki wskaźników funkcja kopiowania dwóch tablic o długości n void tabncpy(int n, int * restrict p, int * restrict q) { while (n-- > 0) *p++ = *q++; } Krzysztof Banaś Podstawy programowania 13

Arytmetyka wskaźników Przykłady arytmetyki wskaźników dwie wersje funkcji obliczania długości tablicy znaków: int strlen_1(char *s) { int n; for (n = 0; *s!= '\0'; s++) n++; return n; } int strlen_2(char *s) { char *p = s; while (*p!= '\0') p++; return p - s; } funkcja kopiowania tablicy znaków void strcpy(char *s, char *t) { while (*s++ = *t++); } Krzysztof Banaś Podstawy programowania 14

Typy danych Określenia zmiennych (poza const): określenia: register, restrict i volatile dotyczą sposobu przechowywania zmiennych określenia są sugestiami dla kompilatora i mogą zostać zignorowane register sugeruje, aby zmienna była przechowana w szybkiej pamięci, np. w rejestrach (co oznacza, że może zniknąć z kodu po kompilacji) konsekwencją jest niemożność posługiwania się w kodzie adresem takiej zmiennej restrict informuje, że wskaźniki których dotyczy operują na wartościach, na których nie operują inne wskaźniki inaczej: obszary tablic w pamięci nie pokrywają się volatile sugeruje, aby dostępy do zmiennej nie podlegały agresywnej optymalizacji przez kompilator może to mieć znaczenie przy korzystaniu z zasobów systemów lub w obliczeniach współbieżnych i równoległych Krzysztof Banaś Podstawy programowania 15

Operatory Trzyargumentowy operator "?:" stosowany w wyrażeniach: w_1? w_2 : w_3 jest interpretowany następująco: jeżeli wyrażenie w_1 jest prawdziwe, obliczane jest wyrażenie w_2 i ono stanowi wynik działania operatora jeżeli wyrażenie w_1 nie jest prawdziwe, obliczane jest wyrażenie w_3 i ono stanowi wynik działania operatora tylko jedno z wyrażeń w_2 i w_3 jest obliczane typ wyniku wynika z zasad konwersji dla operatorów dwuargumentowych (w tym wypadku dotyczy w_2 i w_3) przykład: printf("you have %d item%s.\n", n, n==1? "" : "s"); Wyrażenie: c = a > b? a : b jest równoważne sekwencji operacji obliczania maksimum: if (a>b) c=a; else c=b; Krzysztof Banaś Podstawy programowania 16

Operatory Operatory bitowe dostępne dla argumentów typów: char, short, int, oraz long tak ze znakiem, jak i bez znaku dokonują operacji na reprezentacji bitowej liczb a & b dla każdej pozycji bitowej operacja koniunkcji (AND) a b dla każdej pozycji bitowej operacja alternatywy (OR) a ^ b dla każdej pozycji operacja różnicy symetrycznej (XOR) uzyskanie zera: a ^ a a << b przesunięcie wartości bitów w a o b pozycji w lewo a << 2 mnożenie a przez 4 (zwalniane bity są zerowane) a >> b przesunięcie wartości bitów w a o b pozycji w prawo a >> 1 dzielenie przez 2 (może zależeć od traktowania znaku) ~a negacja bitowa, zamiana 0 na 1 i odwrotnie a & ~077 zerowanie ostatnich sześciu bitów a Krzysztof Banaś Podstawy programowania 17

Pola bitowe C umożliwia definiowanie zmiennych o rozmiarach mniejszych niż typy całkowite, aż do rozmiaru pojedynczego bitu zmienne takie nazywane są polami bitowymi Zmienne takie pakowane są w struktury, które mogą być przechowywane jako liczby typów całkowitych, z poszczególnymi polami bitowymi jako kolejnymi bitami liczby struct { // struktura zawiera własności pojedynczej liczby unsigned int is_positive :1; // po dwukropku rozmiar liczba bitów unsigned int is_even :1; unsigned int is_integer :1; } flags; // pojedyncza zmienna zawierająca pola bitowe Dostęp do poszczególnych pól bitowych jest realizowany za pomocą standardowej składni struktur flags.is_positive = 1; Krzysztof Banaś Podstawy programowania 18

Priorytety operatorów Krzysztof Banaś Podstawy programowania 19