Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałWitołd Kasprowicz Został zmieniony 11 lat temu
1
Ćwiczenie (1) Dostosuj poniższy program do potrzeb zdefiniowanych w treści programu zaliczeniowego: #include void dodaj(){}; void edytuj(){}; void usun(){}; void wyszukaj(){}; void zakoncz(){}; int main(int argc, char *argv[]){ int option; while(option!=0){ printf("Wybierz opcję:\n1 - Dodaj kienta\n2 - Edytuj klienta\n3 - Usuń klienta\n"); printf("4 - Wyszukaj klienta\n0 - Zakończ\n"); scanf("%d", &option); switch(option){ case 0: zakoncz(); break; case 1: dodaj(); break; case 2: edytuj(); break; case 3: usun(); break; case 4: wyszukaj(); break; } system("PAUSE"); return 0; }
2
Debugowanie w środowisku Dev C++ Wykorzystanie opcji debugowania w środowisku Dev C++ wymaga odpowiedniej konfiguracji Linkera. Po wyborze pozycji menu Project\Project Options należy przejść na zakładkę Compiler, a następnie po wybraniu opcji Linker ustawić na Yes wartość parametru Generate debug information". Dev C++ udostępnia kilka opcji pomocnych w debugowaniu kodu. Wszystkie dostępne są w menu Debug. Debugowanie (1)
3
Ćwiczenie 1.Otwórz dowolny program zrealizowany na poprzednich zajęciach. 2.Wykonaj program w dotychczasowy sposób (Execute\Compile & Run). 3.Ustaw opcje kompilatora jak opisano na poprzednim slajdzie. 4.Ustaw kursor na początku funkcji main i wybierz opcję Debug\Toggle breakpoint. 5.Wybierz opcję Debug\Run to cursor. Rozpoczęło się wykonanie programu, jednak zostało ono zatrzymane na linii, w której ustalono breakpoint. 6.Skorzystaj z opcji Debug\Next step. W ten sposób można przejść do wykonania kolejnej instrukcji. 7.Ustaw breakpoint w dalszej linii i wykorzystaj opcję Debug\Continue. 8.Ustaw breakpoint na wywołaniu własnej funkcji, a gdy sterowanie przejdzie do tej lini skorzystaj z opcji Debug\Step into. Debugowanie (2)
4
Ćwiczenie 9.Wybierz opcję Debug\Add Watch i wpisz po pojawiającym się okienku nazwę zmiennej wykorzystywanej w programie. 10.Skorzystaj z opcji Debug\Watch Variables. W ten sposób można zobaczyć jaką wartość przyjmuje w danym momencie wykonywania programu zmienna. 11.Dodaj do funkcji main instrukcję cout << argv[1]<<endl; (argv jest drugim parametrem funkcji main). W okienku Debug\Parameters wpisz w górnym polu jakąś wartość i zaobserwuj wynik działania programu. Tabela dostępna w drugim parametrze funkcji main przechowuje parametry przekazywane przy wywołaniu programu z linii komend. Debugowanie (3)
5
Wskaźniki (1) Wskaźniki służą do wskazywania na zmienne lub obszary pamięci. Deklaracja wskaźnika: nazwa_typu *nazwa_zmiennej; nazwa_typu określa typ zmiennej na jaką może wskazywać wskaźnik. Wskaźnik to nie tylko adres miejsca w pamięci. Zawiera też informację o tym, na jaki typ wskazuje. Wiedza ta może być wykorzystana przy: - interpretowaniu tego, na co pokazuje wskaźnik, - poruszaniu wskaźnika. Przykłady: int *a; short *b; void *c; /*wykorzystywane do wskazywania obszaru pamięci nieokreślonego typu*/
6
Wskaźniki (2) Przykład: #include int main() { int a; int *b; a = 10; b = &a; //nadanie adresu zmiennej a wskaznikowi b printf("a = %d = %d\n", a, *b); *b = 20; printf("a = %d = %d\n", a, *b); printf("%d\n", b); system("PAUSE"); return 0; }
7
Tablice (1) Deklaracja tablic: nazwa_typunazwa_tablicy[rozmiar_tablicy] Inicjalizacja tablic: nazwa_typunazwa_tablicy[rozmiar_tablicy] = {wartość_pierwszego_elementu, wartość_drugiego_elementu,...} nazwa_typunazwa_tablicy[] = {wartość_pierwszego_elementu, wartość_drugiego_elementu,..., wartość_ostatniego_elementu}
8
Tablice (2) Elementy tablicy nazwa_tablicy[numer elementu] Numeracja elementów tablicy zaczyna się od 0. Przekazywanie tablicy do funkcji Deklaracja funkcji: nazwa_typunazwa_funkcji(nazwa_typu nazwa_tablicy[]); Wywołanie funkcji: nazwa_funkcji(nazwa_tablicy);
9
Tablice (3) Przykład: #include int main() { int vti_a[10]; int vi_i; for(vi_i = 0; vi_i<10; vi_i++){ vti_a[vi_i] = vi_i % 2; } for(vi_i = 0; vi_i<10; vi_i++){ printf("%d. element tablicy to %d\n", vi_i+1, vti_a[vi_i]); } system("PAUSE"); return 0; }
10
Tablice (4) Tablice wielowymiarowe Deklaracja tablicy dwuwymiarowej: nazwa_typu nazwa_tablicy[rozmiar_1][rozmiar_2]; Przykład: int tab[4][2]; Elementy tablicy tab: tab[0][0], tab[0][1], tab[1][0], tab[1][1], tab[2][0], tab[2][1], tab[3][0], tab[3][1]
11
Tablice (5) Tablice i wskaźniki Nazwa tablicy jest adresem jej zerowego elementu. Dodanie do wskaźnika liczby całkowitej powoduje, że pokazuje on tyle elementów tablicy dalej. Odjęcie od siebie dwóch wskaźników pokazujących na elementy tej samej tablicy zwraca liczbę dzielących je elementów tablicy.
12
Tablice (6) Przykład: #include int main() { int vti_a[10]; int vi_i; for(vi_i = 0; vi_i<10; vi_i++){ vti_a[vi_i] = vi_i*10; } printf("3. element tablicy ma wartosc %d\n", *(vti_a+2)); printf("3. element tablicy ma wartosc %d\n", vti_a[2]); system("PAUSE"); return 0; }
13
Tablice (7) Tablice znakowe Przykład: char nazwisko[30] = {Andrew Golota}; W rezultacie w poszczególnych komórkach tablicy znajdują się następujące znaki: nazwisko[0] = A; nazwisko[1] = n; nazwisko[2] = d;... nazwisko[11] = t; nazwisko[12] = a; nazwisko[13] = NULL;
14
Tablice (8) Przykład: #include int main() { char tytul[50] = {"Pan Tadeusz"}; char tytul2[50]; printf("Adam Mickiewicz \"%s\"\n", tytul); strcpy(tytul2, "Krzyzacy"); printf("Henryk Sienkiewicz \"%s\"\n", tytul2); system("PAUSE"); return 0; }
15
Tablice (9) Zadanie 1. Napisz program realizujący mnożenie wprowadzonych przez użytkownika macierzy. Zadanie 2. Napisz program realizujący dodawanie i odejmowanie wprowadzonych przez użytkownika macierzy. Zadanie 3. Napisz program obliczający wyznacznik wprowadzonej przez użytkownika macierzy.
16
Struktury (1) Struktura to zbiór elementów dowolnych typów. Elementy struktury nazywane są polami. Definicja struktury: struct [nazwa_struktury]{ definicja_pola_1 definicja_pola_2... definicja_pola3 } [nazwa_zmiennej]; Definicja pola struktury ma identyczną składnię jak definicja pojedynczej zmiennej. Nazwa pola jest widoczna tylko wewnątrz struktury. Wprowadzenie nazwy struktury umożliwia późniejszą deklarację zmiennych będących tymi strukturami. Odwoływanie się do pól struktury: nazwa_zmiennej_strukturowej.nazwa_pola
17
Struktury (2) Przykład: #include struct adres{ char nazwa_ulicy[50]; int nr_domu; int nr_mieszkania; char kod[10]; char miejscowosc[50]; }; int main() { struct adres adres_pracownika1, adres_pracownika2; printf("Ulica: "); scanf("%s", adres_pracownika1.nazwa_ulicy); printf("Nr domu: "); scanf("%d", &adres_pracownika1.nr_domu); printf("Nr mieszkania: "); scanf("%d", &adres_pracownika1.nr_mieszkania);
18
Struktury (3) adres_pracownika2 = adres_pracownika1; printf("Dane skopiowanej struktury\n"); printf("Ulica: %s\n", adres_pracownika2.nazwa_ulicy); printf("Nr domu: %d\n", adres_pracownika2.nr_domu); printf("Nr mieszkania: %d\n", adres_pracownika2.nr_mieszkania); system("PAUSE"); return 0; }
19
Unie Unia to zbiór elementów zajmujących ten sam obszar pamięci. Deklaracja: union nazwa_unii{ definicja_pola_1; definicja_pola_2;... definicja_pola_n; } Przykład: union rwd{ short a; int b; char nazwa[20]; } Odwołanie do pól unii: nazwa_unii.nazwa_pola
20
Wyliczenia (1) Wyliczenia Deklaracja: enum nazwa_typu {nazwa1 = [liczba1],..., nazwaN [= liczbaN]} Przykład: main () enum miesiace{styczen = 1, luty = 2, marzec, kwiecien, maj, czerwiec, lipiec, sierpien, wrzesien, pazdziernik, listopad, grudzien}; int miesiac; scanf("%d", miesiac); case(miesiac){ case styczen: printf("31 dni\n"); break; case luty: printf("28/29 dni\n"); break; case marzec: printf("31 dni\n"); break; //... case grudzien: printf("31 dni\n"); break; }
21
Wyliczenia (2) Przykład: #include enum miesiac{styczen = 1,luty =2,marzec,kwiecien,maj,czerwiec, lipiec,sierpien,wrzesien,pazdziernik,listopad,grudzien}; int main() { int a; printf("Podaj numer miesiaca: "); scanf("%d",&a); switch(a){ case styczen: printf("31 dni\n"); break; case luty: printf("28/29 dni\n"); break; case marzec: printf("31 dni\n"); break; //... case grudzien: printf("31 dni\n"); break; }; system("PAUSE"); return 0; }
22
Definiowanie typów Definiowanie typów Definiowanie typów realizuje się za pomocą słowa kluczowego typedef. Przykład: typedef int macierz[10][20]; typedef int* b[10]; macierz A, B; b wskaxniki;
23
Operacje na tekstach (1) Łączenie tekstów char * strcat(char * tekst_1, char * tekst_2); char * strncat(char * tekst_1, char * tekst_2, rozmiar int); Funkcja strcat zwraca wskaźnik do zmiennej tekst_1. Do wartości zmiennej wskazanej przez tekst_1 zostaje na końcu dołączona wartość zmiennej wskazanej przez tekst_2. Parametr rozmiar pozwala wskazać ile znaków ma zostać skopiowane.
24
Operacje na tekstach (2) Przykład: #include int main() { char a[20], b[10]; scanf("%s", a); scanf("%s", b); printf("Polaczone teksty: %s\n", strcat(a,b)); system("PAUSE"); return 0; }
25
Operacje na tekstach (3) Kopiowanie tekstów char *strcpy(char * tekst_docelowy, char * tekst_zrodlowy); char *strncpy(char * tekst_docelowy, char * tekst_zrodlowy, rozmiar int); Funkcja strcpy i strncpy pozwalają skopiować tekst wskazany wskaźnikiem tekst_zrodlowy, do zmiennej wskazanej wskaźnikiem tekst_docelowy. Parametr rozmiar pozwala określić ile znaków ma być skopiowane. Porównywanie tekstów int strcmp(char * tekst_1, char * tekst_2); int strncmp(char * tekst_1, char * tekst_2, rozmiar_int); Funkcja realizuje porównanie dwóch tekstów. Teksty porównywane są od lewej znak po znaku. Jeśli teksty są jednakowe, to funkcja zwraca 0. Funkcja zwraca wartość mniejszą od 0, jeśli tekst_1 jest mniejszy od tekst_2. Funkcja zwraca wartość większą od 0, jeśli tekst_1 jest większy od tekst_2.
26
Operacje na tekstach (4) Obliczanie długości tekstu size_t strlen(char * tekst); Funkcja zwraca liczbę znaków wskazanego tekstu. Znak \0 nie jest wliczany. Przeszukiwanie tekstu char * strstr(char * tekst_1, char * tekst_2); Funkcja znajduje pierwsze wystąpienie ciągu znaków tekst_2 w tekście tekst_1. Zwracany jest wskaźnik do znalezionego tekstu. Jeśli ciąg znaków nie został znaleziony zwracana jest wartość NULL.
27
Operacje na plikach (1) Otwieranie pliku FILE * fopen(char * sciezka, char * typ); Funkcja otwiera wskazany plik i zwraca wskaźnik do niego. Pierwszy parametr określa pełną ścieżkę lub tylko nazwę pliku, jeśli plik znajduje się w aktualnym katalogu. Funkcja zwraca NULL jeśli otwarcie pliku nie powiodło się. Plik można otworzyć w różnych trybach. Tryb otwarcia wskazuje drugi parametr, który może przy przybierać m. in. wartości: r – Otwiera plik do odczytu. w – Tworzy nowy plik. Jeśli istnieje plik o tej samej nazwie, to zostaje skasowany. Plik otwarty jest w trybie zapisu. a – Otwiera plik w trybie dopisywania. Jeśli plik nie istnieje, to zostaje utworzony. r+ - Otwiera plik w trybie modyfikacji. w+ - Kasuje poprzednią zawartość pliku. Jeśli plik nie istnieje, to zostaje utworzony.
28
Operacje na plikach (2) Odczytywanie pliku i zapisywanie do pliku int fprint(FILE * tekst, char * format [, wartosc_1,...]); int fscanf(FILE * tekst, char * format [, wartosc_1,...]); Działanie funkcji fprintf i fscanf jest analogiczne do funkcji printf i scanf. Dodatkowy parametr FILE jest wskaźnikiem do pliku otwartego w trybie odczytu dla funkcji fscanf, a dla funkcji fprintf parametr FILE jest wskaźnikiem do pliku otwartego w trybie odczytu. Zamykanie pliku int fclose(FILE * stream); Funkcja realizuje zapisanie wszystkich zmian w pliku i zamknięcie go. Funkcja zwraca 0 jeśli operacja zakończyła się powodzeniem. W przypadku wystąpienia błędu funkcja zwraca EOF.
29
Operacje na plikach (3) Przykład: #include int main() { FILE *plik; char a[100], sciezka[100] = "C:\\temp\\abc.txt" ; if ((plik = fopen(sciezka, "r")) == NULL) { printf("Nie mozna otworzyc %s\n", sciezka); system("PAUSE"); exit(1); } while (fscanf(plik, "%s", a)==1) { printf("%s\n", a); } fclose(plik); system("PAUSE"); return 0; }
30
Operacje na plikach (4) Przesuwanie wskaźnika pliku long ftell(FILE * stream); Zwraca aktualną pozycję wskaźnika pliku. int fseek(FILE * stream, long offset, int whence); Funkcja umożliwia przesunięcie wskaźnika pliku. Parametr whence może przyjmować wartości: 0 – wskaźnik jest przesuwany do pozycji wskazanej przez offset, 1 – wskaźnik jest przesuwany do pozycji będącej sumą aktualnej pozycji i wartości offset, 2 – wskaźnik jest przesuwany do pozycji będącej sumą rozmiaru pliku i parametru offset W przypadku powodzenia funkcja zwraca 0.
31
Operacje na plikach (5) Zadanie 4. Napisz program pozwalający na prowadzenie pamiętnika. Program pozwala na dopisywanie do istniejącego pliku dodatkowych zapisków. Możliwe jest też wyświetlenie wszystkich dotychczasowych zapisów.
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.