Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Wielkość: px
Rozpocząć pokaz od strony:

Download "Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński"

Transkrypt

1 Języki programowania Część druga Przetwarzanie tablic znaków Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

2 Łańcuchy znakowe jako tablice znaków ze znacznikiem końca Do reprezentacji łańcuchów znakowych w języku C/C++ wykorzystuje się zwykłe tablice znakowe. Tablice takie nie różnią się od innych tablic w języku C/C++, wprowadzono jedynie kilka udogodnień, czyniących łatwiejszym manipulowanie takimi tablicami. W języku C przyjęto koncepcję łańcuchów ze znacznikiem końca (ang. null terminated strings). To jest napis a to jego reprezentacja wewnętrzna: T o j e s t n a p i s \0 Fizyczna długość napisu = liczba znaków + 1 Znacznik końca napisu \0 to znak o kodzie0 Strona : 2

3 Deklarowanie i inicjowanie zmiennych łańcuchowych Tablice znakowe można inicjować w zwykły sposób, przewidziany dla tablic: const int N = 80; char napis[ N ] = C, /, C, +, + ; // \0??? Czy dobrze? char napis[ N ] = C, /, C, +, +, \0 ; // \0!!! Lepiej Można wykorzystywać wygodniejszą formę: char napis[ N ] = "C/C++"; Literał łańcuchowy: C / C + + \0 napis: C / C + + \ Strona : 3

4 Łańcuch pusty Deklaracja łańcucha zainicjowanego napisem pustym: char imie[ N ] = \0 ; char imie[ N ] = ""; Reprezentacja wewnętrzna łańcucha pustego: Zmienna imie: \ Ustawianie łańcucha pustego po deklaracji: imie[ 0 ] = \0 ; Strona : 4

5 P r z e t w a r z a n i e t a b l i c znaków Przypisanie literału na etapie inicjalizacji Uwaga przypisanie literału łańcuchowego do tablicy znaków może wystąpić tylko przy definiowaniu tablicy i oznacza jej inicjalizację. char napis[ N ] =... napis = "C/C++"; napis = ""; "C/C++"; // Błąd, // Błąd, // OK niedozwolone przypisanie niedozwolone przypisanie Nie wolno również tak: char napis[ N ] = "C/C++"; char napis1[ N ] = napis; // OK // Błąd, niedozwolona inicjalizacja Strona : 5

6 Ogólny schemat przetwarzania tablic znakowych Przetwarzanie tablic polega zwykle na przemaszerowaniu zmienna indeksową po tablicy, dopóki nie ma końca napisu, oznaczanego znakiem '\ ': const int N = 80; int i; char s[ N ];... for( i = 0; s[ i ]!= \0 ; i++ ) < tu jakieś operacje na każdym znaku s[ i ] > Wyprowadzanie zawartości napisu s do strumienia wyjściowego znak po znaku: for( i = 0; s[ i ]!= \0 ; i++ ) cout << s[ i ]; Lub krócej: for( i = 0; s[ i ]!= \0 ; cout << s[ i++ ] ) ; Każdy znak napisu w osobnej linii: for( i = 0; s[ i ]!= \0 ; cout << endl << s[ i++ ] ) ; Strona : 6

7 Przetwarzanie z wykorzystaniem funkcji bibliotecznych string.h Do manipulowania tablicami znakowymi opracowano szereg funkcji bibliotecznych (plik nagłówkowy string.h) większość z nich można łatwo napisać samemu! Strona : 7

8 Wyznaczanie długości napisu funkcja strlen Długość napisu to liczba znaków zapisanych w tablicy znakowej, a więc liczba znaków zapisanych przed wystąpieniem znacznika konca napisu. Długość napisu to nie rozmiar tablicy a liczba znaków w niej zapisanych. Rezultatem funkcji strlen jest liczba znaków napisu, przekazanego tej funkcji parametrem. const int N = 80; char napis[ N ] = "Język C++";... cout << "Liczba znaków w łańcuchu: " << napis << " to: " << strlen( napis ); Liczba znaków w łańcuchu: Język C++ to: 9 Strona : 8

9 Wyznaczanie długości napisu funkcja strlen, zastosowanie Alternatywny algorytm przetwarzania tablic znaków: int i, dlugosc; char napis[ N ];... dlugosc = strlen( napis ); for( i = 0; i < dlugosc; cout << napis[ i++ ] ) ; Lub: for( i = 0, dlugosc = strlen( napis ); i < dlugosc; cout << napis[ i++ ] ) ; Ale nie tak: for( i = 0; i < strlen( napis ); cout << napis[ i++ ] ) ; Dlaczego nie tak? Strona : 9

10 Wyznaczanie długości napisu funkcja strlen, realizacja Realizacja iteracji while: Realizacja iteracji for: int strlen( int len = while( s[ len++; return len; char s[] ) 0; len ]!= '\0' ) int strlen( char s[] ) int len; for( len = 0; s[ len ]!= '\0'; len++ ) ; return len;? len[ i ] == '\0'? 5 len s: C / C + + \ rezultat Indeks elementu zawierającego znacznik końca łańcucha określa liczbę znaków go poprzedzających. Strona : 10

11 Zamiana wielkości liter funkcje strupr i strlwr Konwersja - małe litery na duże: strupr, duże litery na małe: strlwr. char a[ N ] = "ALA"; char b[ N ] = "ala"; strlwr( a ); // Po wywołaniu strlwr zmienna a zawiera napis "ala" strupr( b ); // Po wywołaniu strupr zmienna a zawiera napis "ALA" Realizacja funkcji strupr: void strupr( char s[] ) int i; for( i = 0; s[ i ]!= '\0'; i++ ) s[ i ] = toupper( s[ i ] ); Konwersja elementu tablicy, toupper zamienia znak będący parametrem na literę dużą, o ile był literą małą. Realizacja funkcji strlwr: void strlwr( char s[] ) int i; for( i = 0; s[ i ]!= '\0'; i++ ) s[ i ] = tolower( s[ i ] ); Konwersja elementu tablicy, tolower zamienia znak będący parametrem na literę małą, o ile był literą dużą. Strona : 11

12 Kopiowanie napisów funkcja strcpy, zastosowanie Pamiętamy, że w językach C/C++ nie można kopiować zawartości tablic wykorzystując operator przypisania. char s1[ 80 ] = "C/C++"; char s2[ 20 ];... s2 = s1; // Tak nie wolno!!! Do kopiowania zawartości tablic znakowych używamy funkcji strcpy strcpy( s2, s1 ); Funkcja strcpy kopiuje zawartość tablicy znakowej s1 do tablicy s2. Kopiowaniu podlegają wszystkie znaki łańcucha s1 (aż do \0), zakłada się, że tablica s2 ma rozmiar wystarczający na pomieszczenie kopiowanych znaków. Funkcja strcpy służy również do kopiowania zawartości literałów łańcuchowych: strcpy( s1, "Programowanie " ); strcpy( s2, "w języku C/C++" ); Strona : 12

13 Kopiowanie napisów a parametry tablicowe void strcpy( char d[], char s[] )...;... char s1[ 80 char s2[ strcpy( s2, s1 ); ] = "C/C++"; ]; W C/C++ parametry tablicowe domyślnie przekazywane są przez zmienną (referencję). Gdy parametrem jest tablica, we wnętrzu funkcji nie wiadomo ilu elementowa tablica została przekazana jako parametr aktualny wywołania! Funkcje operujące na napisach poszukują znacznika końca napisu. s == s1: C / C + + \0... d == s2: Strona : 13

14 Kopiowanie napisów funkcja strcpy, przykładowa realizacja void strcpy( char d[], char s[] ) int i = 0; while( s[ i ]!= '\0' ) d[ i i++; d[ i ] ] = s[ i ]; = '\0';? s[ i ] == '\0'? 0 i s: C / C + + \0... d: Strona : 14

15 Kopiowanie napisów funkcja strcpy, przykładowa realizacja void strcpy( char d[], char s[] ) int i = 0; while( s[ i ]!= '\0' ) d[ i i++; d[ i ] ] = s[ i ]; = '\0'; 0 i s: C / C + + \0... d: C Strona : 15

16 Kopiowanie napisów funkcja strcpy, przykładowa realizacja void strcpy( char d[], char s[] ) int i = 0; while( s[ i ]!= '\0' ) d[ i i++; d[ i ] ] = s[ i ]; = '\0';? s[ i ] == '\0'? 1 i s: C / C + + \0... d: C Strona : 16

17 Kopiowanie napisów funkcja strcpy, przykładowa realizacja void strcpy( char d[], char s[] ) int i = 0; while( s[ i ]!= '\0' ) d[ i i++; d[ i ] ] = s[ i ]; = '\0'; 1 i s: C / C + + \0... d: C / Strona : 17

18 Kopiowanie napisów funkcja strcpy, przykładowa realizacja I tak dalej, aż do przepisania ostatniego znaku... Strona : 18

19 Kopiowanie napisów funkcja strcpy, przykładowa realizacja void strcpy( char d[], char s[] ) int i = 0; while( s[ i ]!= '\0' ) d[ i i++; d[ i ] ] = s[ i ]; = '\0'; 4 i s: C / C + + \0... d: C / C Strona : 19

20 Kopiowanie napisów funkcja strcpy, przykładowa realizacja void strcpy( char d[], char s[] ) int i = 0; while( s[ i ]!= '\0' ) d[ i i++; d[ i ] ] = s[ i ]; = '\0'; 5 i s: C / C + + \0... d: C / C Strona : 20

21 Kopiowanie napisów funkcja strcpy, przykładowa realizacja void strcpy( char d[], char s[] ) int i = 0; while( s[ i ]!= '\0' ) d[ i i++; d[ i ] ] = s[ i ]; = '\0';? s[ i ] == '\0'? 5 i s: C / C + + \0... d: C / C Strona : 21

22 Kopiowanie napisów funkcja strcpy, przykładowa realizacja void strcpy( char d[], char s[] )) int i = 0; while( s[ i ]!= '\0' ) d[ i ] d[ i i++; ] = s[ i ]; = '\0';? s[ i ] == '\0'? 5 i s: C / C + + \0... d: C / C + + \ Strona : 22

23 Kopiowanie napisów funkcja strcpy, wersja uproszczona W językach C/C++ operator przypisania jest lewostronnie łączny. Pozwala to na pisanie następujących konstrukcji: d[ 0 ] = d[ 1 ] = d[ 2 ] = 0; Alternatywna, uproszczona realizacja kopiowania napisów: void strcpy( char d[], char s[] ) int i = 0; while( ( d[ i ] = s[ i ] )!= '\0' ) i++; Konstrukcja: ( d[ i ] = s[ i ] )!= '\0' Przypisuje i-ty element tablicy s do i-tego elementu tablicy d. Przypisana wartość jest następnie porównywana (operator!=) ze znacznikiem końca napisu '\0'. Ta wersja funkcji strcpy przepisuje znacznik końca napisu z tablicy s do d w iteracji while. Strona : 23

24 Łączenie napisów funkcja strcat Funkcja strcat dołącza zawartość tablicy znakowej s1 do tablicy s2. Kopiowaniu podlegają wszystkie znaki łańcucha s1 (aż do \0), zakłada się, że tablica s2 ma rozmiar wystarczający na pomieszczenie dołączanych znaków. strcpy( s1, "Programowanie " ); strcpy( s2, "w języku C/C++" ); strcat( cout << s1, s2 ); s1; Programowanie w języku C/C++ Jak to działa? void strcat( char d[], char s[] ) int i = 0, j = 0; while( d[ i ]!= \0 ) i++; while( ( d[ i++ ] = s[ j++ ] )!= \0 ) ; Znajdź znacznik końca napisu docelowego, zapamiętaj jego pozycje w zmiennej i. Przepisz elementy tablicy s do tablicy d. Maszeruj zmienną j od początku tablicy s, zmienną i od pozycji znalezionego wcześniej znacznika końca napisu. Strona : 24

25 Co się stanie, gdy tablica docelowa jest za krótka? void main() char s1[ 5 ] = "AAAA"; char c1 = 'A'; char c2 = 'B'; char s2[ 5 ] = "BBBB"; strcpy( s2, "XXXXXXXXXXXXXXXXXXXX" ); printf( "\ns1 : %s\nc1 : %c\nc2 : %c\ns2 : %s", s1, c1, c2, s2 ); Gdzie oryginalna zawartość tablicy s1? Co się stało ze zmienną c2? Dlaczego zmienna c1 jest OK? LEPIEJ: cout << "\ns1 :" << s1; cout << "\nc1 :" << c1; cout << "\ns2 :" << s2; cout << "\nc2 :" << c2; Nigdy nie należy zakładać, że się uda, czyli że tablica docelowa jest wystarczająco długa. Należy szacować, przewidywać, jeszcze raz przewidywać programować defensywnie. Strona : 25

26 Jak nie dopuszczać do przepełnienia bufora? Biblioteka funkcji operujących na tablicach znaków zawiera funkcje wykonujące operacje analogiczne do przedstawionych uprzednio, pozwalające na kontrolę liczby znaków biorących udział np. w kopiowaniu. Są to np. funkcje: strncpy, strncat, itp. const int N = 10; const int M = 80; char s1[ N ]; char s2[ M ] = "Język C jest świetny lecz pełen pułapek"; strncpy( s1, s2, N - 1 ); strncpy( s1, s2, sizeof( s1 ) - 1 ); s1[ N - 1 ] = '\0'; s1[ sizeof( s1 ) - 1 ] = '\0'; cout << s1; cout << s1; Funkcja strncpy nie zawsze przekopiuje \0! Strona : 26

27 Na marginesie... Często rezultatem funkcji operujących na tablicach są one same. Np. rezultatem funkcji strcpy, strcat, strncpy jest tablica będąca pierwszym parametrem wywołania. strncpy( s1, s2, N - 1 ); s1[ N - 1 ] = '\0' strncpy( s1, s2, N - 1 ) [ N - 1 ] = '\0'; s1 Skrócona wersja kopiowania i dopisywania znacznika końca napisu strcpy( strcat( strcat( strcpy( s1, "Jezyk C" ); s1, "i C++" ); s1, "dla profi!" ); s2, s1 ); strcpy( s2, strcat( strcat( strcpy( s1, "Jezyk C" ), "i C++" ), "dla profi!" ) ); strcpy( s2, strcat( strcat( strcpy( s1, "Jezyk C" ), "i C++" ), "dla profi!" ) ); Strona : 27

28 Funkcja strncpy przykładowa, bezpieczniejsza realizacja void strncpy_while( char d[], char s[], int n ) int i = 0; while( ( d[ i ] = s[ i ] )!= '\0' && i < n ) i++; while( i d[ i++ <= n ) ] = '\0'; void strncpy_for( int i = 0; for( ; ( d[ i ] ; for( ; i <= n ; ; char d[], char s[], int n ) = s[ i ] )!= '\0' && i < n ; i++ ) d[ i++ ] = '\0' ) Strona : 28

29 Odwracanie kolejności znaków w napisie strrev const int MAKS_DL = 80; char napis[ MAKS_DL ] = "C/C++"; cout << endl << napis; strrev( napis ); cout << endl << napis; C/C++ ++C/C napis C / C + + \0... Strona : 29

30 Odwracanie kolejności znaków w napisie strrev const int MAKS_DL = 80; char napis[ MAKS_DL ] = "C/C++"; cout << endl << napis; strrev( napis ); cout << endl << napis; C/C++ ++C/C napis + / C + C \0... Strona : 30

31 Odwracanie kolejności znaków w napisie strrev const int MAKS_DL = 80; char napis[ MAKS_DL ] = "C/C++"; cout << endl << napis; strrev( napis ); cout << endl << napis; C/C++ ++C/C napis + + C / C \0...? Strona : 31

32 Odwracanie kolejności znaków w napisie strrev const int MAKS_DL = 80; char napis[ MAKS_DL ] = "C/C++"; cout << endl << napis; strrev( napis ); cout << endl << napis; C/C++ ++C/C napis + + C / C \0... Strona : 32

33 Na marginesie zamiana wartości w zmiennych, jak? int a = 5; int b = 10; a = b; b = a; Strona : 33

34 Na marginesie zamiana wartości w zmiennych, jak? int a = 5; int b = 10; a = b; b = a; int a = 5; int b = 10; int c; Strona : 34

35 Na marginesie zamiana wartości w zmiennych, jak? int a = 5; int b = 10; int c; c = a; // 1 a = b; // 2 b = c; // 3 Strona : 35

36 Ciekawostka zamiana dla zmiennych numerycznych int a = 5; int b = 10; int c; b = b + a; a = b a; b = b a; To pozornie sprytne rozwiązanie ma subtelną wadę dla liczb bliskich wartości granicznych zakresu typu może dojść do obcięć, a dla zmiennych rzeczywistych do zaokrągleń. W efekcie wartości po zamianie mogą nie być identyczne! Strona : 36

37 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin 0 end s C / C + + \0... Strona : 37

38 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin s[ end ] == 'C' 0 end s C / C + + \0... Strona : 38

39 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin 1 end s C / C + + \0... Strona : 39

40 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin s[ end ] == '/' 1 end s C / C + + \0... Strona : 40

41 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin 2 end s C / C + + \0... Strona : 41

42 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin s[ end ] == 'C' 2 end s C / C + + \0... Strona : 42

43 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin 3 end s C / C + + \0... Strona : 43

44 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin s[ end ] == '+' 3 end s C / C + + \0... Strona : 44

45 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin 4 end s C / C + + \0... Strona : 45

46 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin s[ end ] == '+' 4 end s C / C + + \0... Strona : 46

47 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin 5 end s C / C + + \0... Strona : 47

48 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; //... begin s[ end ] == '\0' 5 end s C / C + + \0... Strona : 48

49 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end;... // Zamiana znakow miejscami for( begin = 0, end--; begin char c = s[ begin ]; s[ begin ] = s[ end ]; s[ end ] = c; < end; begin++, end-- ) begin 0 5 end s C / C + + \0... Strona : 49

50 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end;... // Zamiana znakow miejscami for( begin = 0, end--; begin char c = s[ begin ]; s[ begin ] = s[ end ]; s[ end ] = c; < end; begin++, end-- ) begin 0 4 end s C / C + + \0... Strona : 50

51 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end;... // Zamiana znakow miejscami for( begin = 0, end--; begin char c = s[ begin ]; s[ begin ] = s[ end ]; s[ end ] = c; < end; begin++, end-- ) begin 0 < 4 end s C / C + + \0... Strona : 51

52 Odwracanie kolejności znaków w napisie strrev void strrev( int begin,... // Zamiana for( begin char c = s[ begin s[ end ] char s[] ) end; znakow miejscami = 0, end--; begin < end; begin++, end-- ) s[ begin ]; ] = s[ end ]; = c; begin 0 4 end s C / C + + \0... c C Strona : 52

53 Odwracanie kolejności znaków w napisie strrev void strrev( int begin,... // Zamiana for( begin char c = s[ begin s[ end ] char s[] ) end; znakow miejscami = 0, end--; begin < end; begin++, end-- ) s[ begin ]; ] = s[ end ]; = c; begin 0 4 end s + / C + + \0... c C Strona : 53

54 Odwracanie kolejności znaków w napisie strrev void strrev( int begin,... // Zamiana for( begin char c = s[ begin s[ end ] char s[] ) end; znakow miejscami = 0, end--; begin < end; begin++, end-- ) s[ begin ]; ] = s[ end ]; = c; begin 0 4 end s + / C + C \0... c C Strona : 54

55 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end;... // Zamiana znakow miejscami for( begin = 0, end--; begin char c = s[ begin ]; s[ begin ] = s[ end ]; s[ end ] = c; < end; begin++, end-- ) begin 1 3 end s + / C + C \0... Strona : 55

56 Odwracanie kolejności znaków w napisie strrev void strrev( int begin,... // Zamiana for( begin char c = s[ begin s[ end ] char s[] ) end; znakow miejscami = 0, end--; begin < end; begin++, end-- ) s[ begin ]; ] = s[ end ]; = c; begin 1 < 3 end s + / C + C \0... Strona : 56

57 Odwracanie kolejności znaków w napisie strrev void strrev( int begin,... // Zamiana for( begin char c = s[ begin s[ end ] char s[] ) end; znakow miejscami = 0, end--; begin < end; begin++, end-- ) s[ begin ]; ] = s[ end ]; = c; begin 1 3 end s + / C + C \0... c / Strona : 57

58 Odwracanie kolejności znaków w napisie strrev void strrev( int begin,... // Zamiana for( begin char c = s[ begin s[ end ] char s[] ) end; znakow miejscami = 0, end--; begin < end; begin++, end-- ) s[ begin ]; ] = s[ end ]; = c; begin 1 3 end s + + C + C \0... c / Strona : 58

59 Odwracanie kolejności znaków w napisie strrev void strrev( int begin,... // Zamiana for( begin char c = s[ begin s[ end ] char s[] ) end; znakow miejscami = 0, end--; begin < end; begin++, end-- ) s[ begin ]; ] = s[ end ]; = c; begin 1 3 end s + + C / C \0... c / Strona : 59

60 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end;... // Zamiana znakow miejscami for( begin = 0, end--; begin char c = s[ begin ]; s[ begin ] = s[ end ]; s[ end ] = c; < end; begin++, end-- ) begin 2 2 end s + + C / C \0... Strona : 60

61 Odwracanie kolejności znaków w napisie strrev void strrev( int begin,... // Zamiana for( begin char c = s[ begin s[ end ] char s[] ) end; znakow miejscami = 0, end--; begin < end; begin++, end-- ) s[ begin ]; ] = s[ end ]; = c; begin 2 < 2 end s + + C / C \0... Strona : 61

62 Odwracanie kolejności znaków w napisie strrev void strrev( char s[] ) int begin, end; // Szukanie konca napisu for( end = 0; s[ end ]!= '\0'; end++ ) ; // Zamiana znakow miejscami for( begin = 0, end--; begin < end; begin++, end-- ) char c = s[ begin ]; s[ begin ] = s[ end ]; s[ end ] = c; begin 2 2 end s + + C / C \0... Strona : 62

Podstawy programowania

Podstawy programowania Podstawy programowania Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

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

Języki programowania obiektowego Nieobiektowe elementy języka C++ Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

Tablice deklaracja, reprezentacja wewnętrzna

Tablice deklaracja, reprezentacja wewnętrzna Tablice deklaracja, reprezentacja wewnętrzna Tablica jest zmienną złożoną z elementów tego samego typu. Obejmuje ona ciągły obszar pamięci operacyjnej dokładnie tak duży, aby zmieścić wszystkie jej elementy.

Bardziej szczegółowo

Wprowadzenie do programowania w języku C

Wprowadzenie do programowania w języku C Wprowadzenie do programowania w języku C Część piąta Tablice koncepcja, reprezentacja, przetwarzanie Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE Stała tekstowa / łańcuchowa jest tablicą znaków zakończoną znakiem o kodzie: 0 np. stała łańcuchowa: Jestem tekstem ASCII... J e s t e m t e k s t e m \0...

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera

Bardziej szczegółowo

ŁAŃCUCHY W JĘZYKU C/C++

ŁAŃCUCHY W JĘZYKU C/C++ ŁAŃCUCHY W JĘZYKU C/C++ Stała tekstowa / łańcuchowa jest tablicą znaków zakończoną znakiem o kodzie: 0 np. stała łańcuchowa: Jestem tekstem... 74 101 115 116 101 109 32 116 101 107 115 116 101 109 0......

Bardziej szczegółowo

1 Przetwarzanie tablic znakowych

1 Przetwarzanie tablic znakowych 1 Przetwarzanie tablic znakowych Ćwiczenie to poświęcone jest poznaniu i przetrenowaniu metod przetwarzania tablic znakowych. Tablice znakowe w języku C i C++ umożliwiają przetwarzanie napisów. Umiejętność

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

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

Języki programowania obiektowego Nieobiektowe elementy języka C++ Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Tablice a zmienne wskaźnikowe Nazwa tablicy jako wskaźnik na

Bardziej szczegółowo

Podstawy programowania w języku C i C++

Podstawy programowania w języku C i C++ Podstawy programowania w języku C i C++ Część czwarta Operatory i wyrażenia Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część trzynasta Tablice struktur, pliki struktur Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania Część ósma Tablice znaków i przetwarzanie napisów Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

Podstawy Programowania

Podstawy Programowania Podstawy Programowania dr Elżbieta Gawrońska gawronska@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 1 / 15 Plan wykładu 1 Biblioteka

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2011/2012 Pracownia nr 9 (20.01.2012) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński

Języki programowania. Tablice struktur, pliki struktur. Część ósma. Autorzy Tomasz Xięski Roman Simiński Języki programowania Część ósma Tablice struktur, pliki struktur Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w

Bardziej szczegółowo

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania Rok akademicki 2013/2014, Pracownia nr 10 2/20 Informatyka 1 Tablica elementów ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu Politechnika Białostocka - Wydział Elektryczny Elektrotechnika,

Bardziej szczegółowo

Tablice, funkcje - wprowadzenie

Tablice, funkcje - wprowadzenie Tablice, funkcje - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 5 25 marca 2019 (Wykład 5) Tablice, funkcje - wprowadzenie 25 marca 2019 1 / 12 Outline 1 Tablice jednowymiarowe 2 Funkcje (Wykład

Bardziej szczegółowo

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Ję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ółowo

Wstę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 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ółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak: Ćwiczenie nr 6 Temat: Operacje na łańcuchach znaków. Zagadnienia: Zasady pracy z łańcuchami tekstowymi (tablice wartości typu char). funkcje standardowe operacji na łańcuchach, funkcje I/O dla operacji

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

Podstawy programowania 1

Podstawy 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ółowo

Wprowadzenie do programowania w języku C

Wprowadzenie do programowania w języku C Wprowadzenie do programowania w języku C Część szósta Zmienne wskaźnikowe koncepcja, zastosowania, sztuczki i triki Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część jedenasta Przetwarzanie plików amorficznych Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski

Bardziej szczegółowo

Operacje na łańcuchach znaków

Operacje na łańcuchach znaków Operacje na łańcuchach znaków wer. 6 z drobnymi modyfikacjami Wojciech Myszka 2014-02-09 16:32:23 +0100 Łańcuch znaków 1. Z łańcuchów znaków korzystamy powszechnie. 2. Najprostszy przykład: p r i n t f

Bardziej szczegółowo

Stał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, 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ółowo

Łańcuchy znaków. Agnieszka Nowak - Brzezińska

Łańcuchy znaków. Agnieszka Nowak - Brzezińska Łańcuchy znaków Agnieszka Nowak - Brzezińska Warto najpierw zajrzeć http://gpl.ii.us.edu.pl/~romex/pp_cxx/pp_cxx_w_07.pdf Wszystkie funkcje są omówione w wykładzie! Etap I Napisz program w całości na tablicach

Bardziej szczegółowo

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 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ółowo

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

utworz 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ółowo

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

METODY 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ółowo

Programowanie Proceduralne

Programowanie Proceduralne Programowanie Proceduralne Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 7 strlen size_t strlen(char const *s); Oblicza długość napisu wskazywanego przez s Przykładowy

Bardziej szczegółowo

Laboratorium 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 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ółowo

Tablice. int rozmiar; cout << Jaki ma być rozmiar tabeli? ; cin >> rozmiar; { int tablica[rozmiar]; /* TU JEST ŹLE */... }

Tablice. int rozmiar; cout << Jaki ma być rozmiar tabeli? ; cin >> rozmiar; { int tablica[rozmiar]; /* TU JEST ŹLE */... } Tablice grupa obiektów tego samego typu tablica tablica ciąg obiektów tego samego typu, zajmujący ciągły obszar w pamięci korzyść zamiast wielu definicji poszczególnych obiektów jedna wspólna; odniesienia

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Tablice wielowymiarowe inaczej Efekt tablicy wielowymiarowej można uzyskać definiując tablicę jednowymiarową odpowiedniego

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część jedenasta Reprezentacja i przetwarzanie plików Konwencja języka C Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

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

Tablice 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ółowo

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF22

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF22 Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1D300 017 (studia stacjonarne)

Bardziej szczegółowo

Inicjacja tablicy jednowymiarowej

Inicjacja tablicy jednowymiarowej TABLICE C++ Inicjacja tablicy jednowymiarowej typ_komórek_tablicy nazwa_tablicy [ ilość elementów tablicy ] ; np.: int tablica[1000]; czyli tablica, która może przechowywać tysiąc elementów typu całkowitego,

Bardziej szczegółowo

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 6: Ciągi znaków mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 17 listopada 2016 1. Wprowadzenie Instrukcja poświęcona jest zmiennym, które służą do przechowywania

Bardziej szczegółowo

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2

Tablice wielowymiarowe. Przykład tablica 2-wymiarowa. Przykład. Przykład 3-wymiarowy. Tak naprawdę nie istnieją w C! Rozważmy tablicę o rozmiarze 3x2 Tablice wielowymiarowe Przykład tablica 2-wymiarowa Tak naprawdę nie istnieją w C! Tak naprawdę C i Java dopuszczają tworzenie tablic tablic tablica 2-wymiarowa = tablica (zwykłych) tablic tablica 3-wymiarowa

Bardziej szczegółowo

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

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 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ółowo

Programowanie 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 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ółowo

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 5 1 SPECYFIKATOR const Specyfikator (przydomek) const: Umieszczenie przed nazwą zmiennej specyfikatora const w jej definicji informuje kompilator,

Bardziej szczegółowo

Tablice, funkcje, wskaźniki - wprowadzenie

Tablice, funkcje, wskaźniki - wprowadzenie Tablice, funkcje, wskaźniki - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 4 19 listopada 2018 (Wykład 4) Tablice, funkcje, wskaźniki - wprowadzenie 19 listopada 2018 1 / 37 Outline 1 Tablice

Bardziej szczegółowo

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 9 - sem.iii. Dr inż. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 9 - sem.iii Dr inż. M. Czyżak Język ANSI C tablice znaków Tablice znaków (łańcuchy) Tablice znaków stanowią specjalny rodzaj tablic o budowie ułatwiającej

Bardziej szczegółowo

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

Ję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ółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne

Bardziej szczegółowo

Zajęcia 4 procedury i funkcje

Zajęcia 4 procedury i funkcje Zajęcia 4 procedury i funkcje 1. Napisz funkcję, która dokonuje dodania dwóch liczb przekazanych jako parametry. Następnie: zmień wartości zmiennych przekazanych jako parametry wewnątrz tej funkcji, ustaw

Bardziej szczegółowo

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

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Tablica znaków w językach C i C++ (oraz pochodnych) łańcuch znaków przechowywany jest jako

Bardziej szczegółowo

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

1 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ółowo

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku

iii. b. Deklaracja zmiennej znakowej poprzez podanie znaku Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 5. Stałe i zmienne znakowe. Tablice. Wskaźniki do tablic. Operacje na wskaźnikach. Instrukcja switch, case. Wyrażenie przecinkowe. Funkcje

Bardziej szczegółowo

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

Podstawy 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ółowo

Wykład 6. Operacje na łańcuchach znakowych

Wykład 6. Operacje na łańcuchach znakowych Wykład 6. Operacje na łańcuchach znakowych 1. Łańcuch znaków jako tablica Do przechowania łańcucha znaków służy tablica znakowa. W kolejnych pozycjach tej tablicy są pamiętane kolejne znaki. Ostatnim znakiem

Bardziej szczegółowo

tablica: dane_liczbowe

tablica: 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ółowo

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF10Z

Spis treści JĘZYK C - ŁAŃCUCHY ZNAKÓW. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF10Z Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 1 Kod przedmiotu: EZ1C200 010 (studia niestacjonarne)

Bardziej szczegółowo

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 11. Elektrotechnika, semestr II rok akademicki 2008/2009

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 11. Elektrotechnika, semestr II rok akademicki 2008/2009 Informatyka 1 zajęcia nr 11 Elektrotechnika, semestr II rok akademicki 2008/2009 mgr inż.. Paweł Myszkowski Plan dzisiejszych zajęć 1. Łańcuchy znaków 2. Wprowadzanie i wyprowadzanie znaków w i łańcuchów

Bardziej szczegółowo

Programowanie 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 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ółowo

Podstawy programowania w języku C i C++

Podstawy programowania w języku C i C++ Podstawy programowania w języku C i C++ Część szósta Tablice koncepcja, reprezentacja, przetwarzanie Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY 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

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie Krzysztof Banaś Podstawy programowania 1 są sposobem na przechowywanie w ramach pojedynczej zmiennej zestawu zmiennych różnych typów,

Bardziej szczegółowo

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe Podstawy programowania Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe 1 Podstawy programowania Część I Łańcuchy znaków 2 I. Zmienne łańcuchowe Klasyfikacja zmiennych statycznych

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 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ółowo

Wprowadzenie do programowania w języku C

Wprowadzenie do programowania w języku C Wprowadzenie do programowania w języku C Część druga Instrukcje sterujące przebiegiem programu Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

Wykład 2 Składnia języka C# (cz. 1)

Wykład 2 Składnia języka C# (cz. 1) Wizualne systemy programowania Wykład 2 Składnia języka C# (cz. 1) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Budowa projektu 2 Struktura programu

Bardziej szczegółowo

Spis 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 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ółowo

Wstęp do programowania

Wstęp do programowania wykład 7 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Napisy w stylu C (tablice znaków) Łańcuch to ciąg znaków przechowywanych w kolejnych bajtach. Łańcuchy reprezentują napisy.

Bardziej szczegółowo

Wskaźniki. Informatyka

Wskaź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ółowo

Wstęp do programowania

Wstęp do programowania wykład 7 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Tablice wielowymiarowe Tablice wielowymiarowe, podobnie jak jednowymiarowe, przechowują wartości tego samego typu. Przykłady:

Bardziej szczegółowo

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 7- sem.iii. M. Czyżak Katedra Elektrotechniki Teoretycznej i Informatyki wykład 7- sem.iii M. Czyżak Język C tablice znaków Tablice znaków (łańcuchy) Tablice znaków stanowią specjalny rodzaj tablic o budowie ułatwiającej przetwarzanie

Bardziej szczegółowo

Podstawy 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 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ółowo

Języki i metody programowania I

Języki i metody programowania I Języki i metody programowania I dr inż. Piotr Szwed Katedra Informatyki Stosowanej C2, pok. 403 e-mail: pszwed@agh.edu.pl http://home.agh.edu.pl/~pszwed/ Aktualizacja: 2013-01-18 8. Łańcuchy znaków Łańcuchy

Bardziej szczegółowo

Programowanie w C Typ wskaźnikowy do typu znakowego i operacje na łańcuchach

Programowanie w C Typ wskaźnikowy do typu znakowego i operacje na łańcuchach Programowanie w C Typ wskaźnikowy do typu znakowego i operacje na łańcuchach Artur Opaliński (pokój E112) e-mail: (p. wykład administracyjny) URL: (p. wykład administracyjny) Treść wykładu Podstawowe funkcje

Bardziej szczegółowo

Informatyka 1. Przetwarzanie tekstów

Informatyka 1. Przetwarzanie tekstów Informatyka 1 Wykład IX Przetwarzanie tekstów Robert Muszyński ZPCiR ICT PWr Zagadnienia: reprezentacja napisów znakowych, zmienne napisowe w Sun Pascalu, zgodność typów, operowanie na napisach: testowanie

Bardziej szczegółowo

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

Tablice (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ółowo

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

JĘ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

Programowanie komputerowe. Zajęcia 3

Programowanie komputerowe. Zajęcia 3 Programowanie komputerowe Zajęcia 3 Instrukcje przypisania Poza zwykłą instrukcją przypisania, powodującą ustawienie wartości zmiennej na podane wyrażenie, istnieje wiele innych, np. += dodaj, a+=b jest

Bardziej szczegółowo

1. Typy zmiennych. 2. Typy podstawowe: char short int int long int float

1. Typy zmiennych. 2. Typy podstawowe: char short int int long int float KURS C/C++ WYKŁAD 4 1. Typy zmiennych 2. Typy podstawowe 3. Stałe 3.1. Stałe całkowite 3.2. Stałe zmiennoprzecinkowe 3.2. Stałe znakowe 3.4. Stałe tekstowe 4. Typy pochodne 4.2. Typ void 4.2. Tablice 4.2.1.

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 4

Programowanie komputerowe. Zajęcia 4 Programowanie komputerowe Zajęcia 4 Typ logiczny Wartości logiczne są reprezentowane przez typ bool. Typ bool posiada tylko dwie wartości: true i false. Zamiast wartości logicznych można używać wartości

Bardziej szczegółowo

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu. Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 6. Tablice znakowe o dwóch indeksach, przekazywanie tablic do funkcji cd., dynamiczna alokacja pamięci, funkcje przetwarzające ciągi

Bardziej szczegółowo

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

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Algorytmy liniowe Algorytmy z rozgałęzieniami

Bardziej szczegółowo

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:

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: 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: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja

Bardziej szczegółowo

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

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

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37 Programowanie w C++ Wykład 4 Katarzyna Grzelak 19 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37 Funkcje cd K.Grzelak (Wykład 1) Programowanie w C++ 2 / 37 Funkcja powtórzenie Funkcje == podprogramy

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie

Bardziej szczegółowo

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

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 2. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Algorytmy liniowe Algorytmy z rozgałęzieniami

Bardziej szczegółowo

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Zaawansowane programowanie w języku C++ Biblioteka standardowa Zaawansowane programowanie w języku C++ Biblioteka standardowa Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

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

KURS 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ółowo

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

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include

Bardziej szczegółowo

Programowanie 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 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ółowo

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo