78
Zasady Literatura Dlaczego C? Tworzenie . . . Edycja kodu . . . Kompilacja Debugowanie Ważne pojęcia: Typy i zmienne Sterowanie Jednostki leksykalne Ważne pojęcia Typy zlożone Funkcje Stale i wyliczenia Strona glówna Strona tytulowa JJ II J I Strona 1 z 78 Powrót Full Screen Zamknij Koniec Podstawy Programowania Lukasz Kuszner http://www.kaims.pl/kuszner/ [email protected] Wyklad, 2012/13

Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

  • Upload
    dohuong

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 1 z 78

Powrót

Full Screen

Zamknij

Koniec

Podstawy Programowania

Łukasz Kusznerhttp://www.kaims.pl/∼kuszner/

[email protected]

Wykład,

2012/13

Page 2: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 2 z 78

Powrót

Full Screen

Zamknij

Koniec

1. Zasady

Cel

Poznać podstawy języka C, zbudować dobre podstawy do dalszejnauki programowania.

Zaliczenie

• Zaliczenie zajęć praktycznych

• Wykład kończy się egzaminem pisemnym

Page 3: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 3 z 78

Powrót

Full Screen

Zamknij

Koniec

2. Literatura

Książki

• Język ANSI C, Brian W. Kernighan, Dennis M. Ritchie,WNT.

• Język C. Wskaźniki. Vademecum profesjonalisty, Kenneth A.Reek (Pointers on C), Helion.

• Inne książki traktujące o języku C lub rozdziały dotyczą-ce programowania proceduaralnego z książek traktujących oprograwmowaniu w C++.

Page 4: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 4 z 78

Powrót

Full Screen

Zamknij

Koniec

Inne

• System pomocy Visual Studio

• Pomoc na stronach firmy Micrososft

• strony pomocy HowTo, man i info z dystrybucji Linux’a

• http://ideone.com/kusziamw/opr11 - programy przykłado-we

• http://spoj.pl - ogólnodostępny zbiór zadań i sędzia online

• https://pl.spoj.pl/ - ogólnodostępny zbiór łatwych zadań nadobry początek w języku polskim

Page 5: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 5 z 78

Powrót

Full Screen

Zamknij

Koniec

Narzędzia

• Visual Studio

• Sphere Online Judge (spoj.pl)

• Ewentulanie inne środowiska zintegrowane (ang. IDE - Inte-grated development environment): Code::Blocks, . . . )

• Kompilatory usostępnione na licencji GNU (GCC, DJGPP,. . . ), edytory kodu (emacs, vim, notepad++, . . . ), debugger(gdb, . . . ).

• Kompilator online (ideone.com).

Page 6: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 6 z 78

Powrót

Full Screen

Zamknij

Koniec

3. Dlaczego C?

Historia języka C

Język C jest strukturalnym językiem imperatywnym rozwijanympoczątkowo głównie w ramach systemu UNIX.Poprzednikiem C był interpretowany język B, który Ritchie roz-winął w język C. Pierwszy okres rozwoju języka to lata 1969-1973.W roku 1973 w języku C udało się zaimplementować jądro (ker-nel) systemu operacyjnego Unix. W 1978 roku Brian Kernighani Dennis Ritchie opublikowali dokumentację języka p.t. C Pro-gramming Language (wydanie polskie: Język ANSI C).C stał się popularny poza Laboratoriami Bella (gdzie powstał)po 1980 roku, i stał się dominującym językiem do programowaniasystemów operacyjnych i aplikacji. Na bazie języka C w latachosiemdziesiątych Bjarne Stroustrup stworzył język C++, którywprowadza możliwość programowania obiektowego.

Page 7: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 7 z 78

Powrót

Full Screen

Zamknij

Koniec

Standardy C

Pierwsze wersje systemu UNIX były rozpowszechniane w szko-łach wyższych wraz z pełnym kodem źródłowym napisanym wjęzyku C.Potrzeba stworzenia standardu języka wynikała z jego popular-ności - coraz więcej osób z niego korzystało (głównie na uniwer-sytetach).Amerykański standard języka - ANSI C (1983-1988) - stanowiłznaczne rozszerzenie w stosunku do wersji Kernighan’a i Rit-chie’go. Kolejna wersja standardu języka: ISO 9899:1990 była mo-dyfikacją standardu ANSI. Język zgodny z tą wersją standarduokreślany jest nieformalnie jako C89. Od tego czasu powstało wie-le uaktualnień tej normy na przykład powszechnie obowiązującaC99.

Page 8: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 8 z 78

Powrót

Full Screen

Zamknij

Koniec

Zastosowania

• Programowanie niskopoziomowe: sterowniki

• Implementacja fragmentów systemu o zwiększonych wyma-ganiach efektywnościowych

Dlaczego jeszcze warto nauczyć się C?

• Popularne języki wysokiego poziomu mają składnię opartąna C (C++, Java, C#).

• Elementy składniowe języka występują w zasadzie we wszyst-kich językach imperatywnych.

• Od czegoś trzeba zacząć.

Page 9: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 9 z 78

Powrót

Full Screen

Zamknij

Koniec

4. Tworzenie oprogramowaniaTworzenie oprogramowania zaczyna się od powstania potrzebyjego istnienia. W naszym wypadku tą potrzebą jest proces kształ-cenia w którym bierzemy udział. Kolejne fazy, jakie można wy-odrębnić to:

• analiza problemu i tworzenie zarysu projektu,

• projektowanie, tworzenie specyfikacji technicznej,

• pisanie kodu,

• testowanie i debugowanie.

• wdrożenie i utrzymanie

Na zajęciach będą nas interesować głównie elementy związane zkodowaniem, testowaniem i debugowaniem.

Page 10: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 10 z 78

Powrót

Full Screen

Zamknij

Koniec

Pisanie kodu i kompilacja

Przykład 1.

#include<s t d i o . h>int main ( ){

p r i n t f ( ” He l l o world !\n” ) ;return 0 ;

}Mówiąc w dużym skrócie powyższy program musi zostać przetłu-maczony z kodu źródłowego na język maszyny. Program, który dotego służy nazywamy kompilatorem, a sam proces tłumaczeniakompilacją.

Page 11: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 11 z 78

Powrót

Full Screen

Zamknij

Koniec

Elementy kodu programu

Program w języku C musi zawierać funkcję main. Funkcja main,podobnie jak każda inna funkcja w C ma następującą postać:<typ zwracany> <nazwa>(<parametry>){<kod funkcji>}

Nasz program zawiera tylko i wyłącznie funkcję main, któranie ma żadnych parametrów i składa się z dwóch instrukcji:printf("Hello world!\n");, ta wypisuje tekst zawarty w cu-dzysłowie, oraz return 0;, ta nakazuje zakończenie działaniafunkcji, a w wypadku funkcji main również i programu oraz prze-kazanie wartości 0.Typem zwracanym przez main jest int – typ całkowitoliczbowy.Wartość 0 zostaje przekazana do systemu i oznacza poprawnewykonanie programu.

Page 12: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 12 z 78

Powrót

Full Screen

Zamknij

Koniec

Pliki nagłówkowe

W plikach nagłówkowych (zwyczajowo mają one rozszerzenie .h)znajdują się deklaracje funkcji bibliotecznych. Przykładowofunkcja biblioteczna printf znajduje się w domyślnie włączanymnagłówku stdio.h. Do włączenia nagłówka używamy dyrektywy#include:

Page 13: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 13 z 78

Powrót

Full Screen

Zamknij

Koniec

Struktura programu

• Kod programu może zostać umieszczony w jednym bądź wie-lu plikach.

• Program składa się z dyrektyw preprocesora, definicji typów,funkcji oraz zmiennych.

• Funkcje zbudowane są z instrukcji, z których każda zakoń-czonych średnikiem.

• Instrukcje składają się ze słów kluczowych, operatorów, nazwzmiennych oraz znaków grupujących i separujących (nawiasy,przecinki, średniki).

Page 14: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 14 z 78

Powrót

Full Screen

Zamknij

Koniec

Uruchomienie programu

• Program zaczyna działanie od wykonania funkcji main. Po-zostałe funkcje mogą być napisane przez programistę lub po-chodzić z bibliotek.

• Przed uruchomieniem program należy skompilować i scalić(linkowanie, konsolidacja) z funkcjami bibliotecznymi.

Page 15: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 15 z 78

Powrót

Full Screen

Zamknij

Koniec

5. Edycja kodu źródłowegoPożądane cechy edytora kodu programu:

• Podświetlanie składni

• Wielokrotne cofnij/powtórz

• Zaznaczanie blokowe

• Parowanie nawiasów

• Autowcięcia

• Autouzupełnianie

• Ukrywanie części kodu

• Ukrywanie części tekstu

• Integracja z kompilatorem

• Możliwość sprawdzania pisowni (np. w komentarzach)

• Łatwość obsługi

• Niska cena

Page 16: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 16 z 78

Powrót

Full Screen

Zamknij

Koniec

6. KompilacjaKompilacja to proces automatycznego tłumaczenia kodu napisa-nego w jednym języku programowania na inny (kod maszyno-wy lub kod pośredni). Dane wejściowe najczęściej nazywa się ko-dem źródłowym. Program wykonujący tłumaczenie to kompila-tor. Przeważnie kompilacja jest częścią większego procesu tłuma-czenia, a tworzony w jej trakcie kod wynikowy jest przekazywanydo linkera (konsolidatora).

Page 17: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 17 z 78

Powrót

Full Screen

Zamknij

Koniec

Proces przetwarzania kodu źródłowego

• preprocessing - przetworzenie wstępne, na przykład włącze-nie plików nagłówkowych

• kompilacja

• konsolidacja - łączenie skompilowanych modułów i utworze-niu pliku wykonywalnego.

Page 18: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 18 z 78

Powrót

Full Screen

Zamknij

Koniec

Page 19: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 19 z 78

Powrót

Full Screen

Zamknij

Koniec

Etapy kompilacji

• Faza wstępna - odczyt i analiza kodu na podstawie regułjęzyka, tworzenie reprezentacji pośredniej kodu źródłowegow postać grafu lub drzewa zależności.

• Analiza leksykalna - rozdzielenie kodu na elementarne jed-nostki języka programowania zwane tokenami.

• Analiza składniowa - dopasowanie tokenów do gramatykijęzyka (sprawdzenie, czy kod źródłowy był poprawny skła-dniowo)

• Analiza semantyczna - określenie znaczenia poszczególnychtokenów. Przykładem może być sprawdzanie, czy nie wystę-puje niezgodność typów.

• Optymalizacja - reprezentacja pośrednia jest upraszczanatak, aby program otrzymany na jej podstawie charaktery-zował się pewnymi cechami (np. większą wydajnością lubmniejszą objętością).

• Generacja kodu na podstawie reprezentacji pośredniej gene-rowany jest kod wynikowy.

Page 20: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 20 z 78

Powrót

Full Screen

Zamknij

Koniec

Dyrektywy preprocesora

• #include ... - dyrektywa włączająca tekst innego pliku źró-dłowego w miejscu jej wystąpienia w pliku podlegającymaktualnie przetwarzaniu, przy czym możliwe jest zagłębionewystępowanie dyrektywy include

• #define i #undef definiowanie symboli dla warunkowejkompilacji

• #if, #elif, #else, and #endif - warunkowe włączanie iwyłączanie fragmentów kodu źródłowego

• inne: #pragma, #error, #warning, . . .

Page 21: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 21 z 78

Powrót

Full Screen

Zamknij

Koniec

Dyrektywy preprocesora - przykład

Zabezpieczenia plików nagłówkowych przed wielokrotnym dołą-czaniem do tego samego projektu.Jeżeli treść pliku nagłówkowego nazwa.h zawiera instrukcje:

#ifndef NAZWA H#define NAZWA H

// . . . t reść właściwa . . .

#endif

to przy kolejnej próbie włączenia pliku cała treść właściwa zosta-nie pominięta.

Page 22: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 22 z 78

Powrót

Full Screen

Zamknij

Koniec

Błędy kompilacji

Bezproblemowy przebieg kompilacji programu jest rzadkim zja-wiskiem nawet u doświadczonych programistów.

Przykład 2.

int main ( ){

p r i n t f ( ” He l l o world !\n” ) //Brak średnikareturn 0 ;

}Powyższy przykład jest błędny. Próba kompilacji takiego progra-mu zakończy się niepowodzeniem. Przykładowe komunikaty wy-świetlone przez kompilator mogą mieć następującą postać:

Przykład 3.hello.c: In function ‘main’:hello.c:4: error: syntax error before "return"

Kompilator uznał, że błąd znajduje się w linii 4 przed słowemreturn, mimo że średnik zwyczajowo piszemy bezpośrednio poinstrukcji. Mimo to sytuacja jest wielce komfortowa; otrzymali-śmy precyzyjny komunikat o błędzie, który łatwo poprawić.

Page 23: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 23 z 78

Powrót

Full Screen

Zamknij

Koniec

7. DebugowanieDebugowanie (ang. debugging = odpluskwianie) - proces śledze-nia działania systemu mikroprocesorowego lub programu kom-puterowego za pomocą specjalnego programu - debugera w celuwychwycenia i naprawy błędów w działaniu uruchamianego urzą-dzenia lub oprogramowania. Istotą uruchamiania przy pomocydebugera jest możliwość wykonywania programu w trybie pra-cy krokowej lub z zastawianiem tzw. pułapek (ang. breakpoints),czyli miejsc w programie, po osiągnięciu których dalsze wykony-wanie programu jest zatrzymywane, a także podglądania i ew.zmiany zawartości rejestrów, pamięci itd.

Page 24: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 24 z 78

Powrót

Full Screen

Zamknij

Koniec

8. Ważne pojęcia:• kod źródłowy,

• kompilacja,

• pliki nagłówkowe,

Page 25: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 25 z 78

Powrót

Full Screen

Zamknij

Koniec

Zadanie 1. Scharakteryzuj przydatność do tworzenia opro-gramowanie następujących edytorów tekstu: Notatnik, MicrosoftWord, innego wybranego edytora.

Zadanie 2. Napisz, skompiluj i wykonaj swój pierwszy programw C.

Zadanie 3. Poznaj i wypróbuj podstawowe opcje kompilatora.

Page 26: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 26 z 78

Powrót

Full Screen

Zamknij

Koniec

9. Typy i zmienneJak wiemy, komputer operuje na danych binarnych, można my-śleć, że dane w pamięci komputera to ciągi liczb złożone z 0 i 1.Sposób interpretacji przechowywanych danych zależy od ich typu.Wspomniano już o typie całkowitoliczbowym int. Typ char od-nosi się do danych znakowych. Popatrzmy na poniższy przykład:

Przykład 4.

#include<s t d i o . h>int main ( ){

int a=75;char z ;p r i n t f ( ”a = %d\n” , a ) ;z=a ;p r i n t f ( ”z = %c\n” , z ) ;p r i n t f ( ”z = %d\n” , z ) ;return 0 ;

}

Page 27: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 27 z 78

Powrót

Full Screen

Zamknij

Koniec

Komentarz

Najpierw została zadeklarowana zmienna a typu liczbowego intz wartością początkową 75. Liczba ta została wypisana instrukcjąprintf. Następnie wartość ta została podstawiona do zmiennejtypu znakowego z i również wartość tej zmiennej została wypi-sana. Tym razem na ekranie zobaczymy jednak literę K, którejkodem ASCII jest 75. Kolejne wypisanie każe traktować zmien-ną znakową z jako liczbę (specyfikator %d) i znowu na ekraniezobaczymy liczbę 75. Później zobaczymy, że z punktu widzeniakompilatora nie ma różnicy między znakami, a kodami ASCIIznaków.

Page 28: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 28 z 78

Powrót

Full Screen

Zamknij

Koniec

Interpretacja i rozmiar

Kolejną różnicą między typami danych jest ich rozmiar. Typ charma jeden bajt, czyli 8 bitów, a typ int ma co najmniej 2 bajty(16 bitów) – to gwarantuje standard, faktycznie w systemie Linuxtyp ten ma 4 bajty (32 bity). W każdym razie jest to typ szerszyniż char, co pokazuje poniższy przykład.

Page 29: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 29 z 78

Powrót

Full Screen

Zamknij

Koniec

Przykład 5.

#include<s t d i o . h>int main ( ){

int a=322;char z ;

p r i n t f ( ”a = %d\n” , a ) ;z=a ;p r i n t f ( ”z = %c\n” , z ) ;p r i n t f ( ”z = %d\n” , z ) ;return 0 ;

}Po podstawieniu z=a zmienna z ma wartość B – litery o kodzie66 (reszta z dzielenie 322 przez 256).

Page 30: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 30 z 78

Powrót

Full Screen

Zamknij

Koniec

Typy zmiennoprzecinkowe i zaokrąglenia

W języku C możliwe jest również operowanie na liczbach niecał-kowitych. Umożliwiają to typy float i double. Nazywa się jezmiennoprzecinkowymi ze względu na specjalny format zapisu.

Przykład 6.

#include<s t d i o . h>int main ( ){

float x =1.5 ;p r i n t f ( ”x=%f\n” , x ) ;return 0 ;

}

Page 31: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 31 z 78

Powrót

Full Screen

Zamknij

Koniec

Operatory

Dotychczas poznaliśmy jeden operator =. Jest to dwuargumen-towy operator przypisania. Wyrażenie a=b oznacza, że lewemuoperandowi a przypisuje się wartość b. Inne operatory to np.:

• + – dodawanie,

• - – odejmowanie,

• * – mnożenie,

• > – porównanie: lewy większy od prawego,

• < – porównanie: lewy mniejszy od prawego,

• == – porównanie: lewy równy prawemu.

Page 32: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 32 z 78

Powrót

Full Screen

Zamknij

Koniec

Proste typy danych

W języku C występuje tylko kilka podstawowych typów danych:

• char jeden bajt, typ znakowy

• int typ całkowity, standard ANSI określa rozmiar na co naj-mniej dwa bajty

• float typ zmiennoprzecinkowy pojedynczej precyzji

• double typ zmiennoprzecinkowy podwójnej precyzji

Page 33: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 33 z 78

Powrót

Full Screen

Zamknij

Koniec

Kwalifikatory typów

Kwalifikatory rozmiaru typów liczbowych

• short int (krótki int, nie dłuższy niż int)

• long int (długi int, przynajmniej 4 bajty)

• long double typ zmiennoprzecinkowy rozszerzonej precyzji

Przykład 7.

short int a ;long int b ;long double c ;

Page 34: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 34 z 78

Powrót

Full Screen

Zamknij

Koniec

Kwalifikatory typów c.d.

Kwalifikatory:

• signed (liczby ze znakiem)

• unsigned (liczby bez znaku )

można stosować z typem char lub dowolnym typem całkowitym,

Przykład 8.

signed char a ; /∗ −128 <= a <= 127 ∗/unsigned int b ; /∗ 0 <=b <= 255 ∗/signed long int l i ;

Page 35: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 35 z 78

Powrót

Full Screen

Zamknij

Koniec

10. Sterowanie• grupowanie instrukcji - nawiasy klamrowe { }• wybór wariantowy (if, switch)

• pętle (iteracje) - powtarzanie instrukcji, bądź grupy instrukcjize sprawdzeniem warunku zatrzymania (for, do, while).

Page 36: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 36 z 78

Powrót

Full Screen

Zamknij

Koniec

Grupowanie instrukcji

Każda instrukcja musi być zakończona średnikiem, np:

x = 0 ;p r i n t f ( ” He l l o ” ) ;return 1 ;

Nawiasy klamrowe służą do grupowania instrukcji w instrukcjęzłożoną, czyli blok, np.:

{x = 0 ;p r i n t f ( ” He l l o ” ) ;return 1 ;

}

Page 37: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 37 z 78

Powrót

Full Screen

Zamknij

Koniec

Instrukcja warunkowa

Instrukcje warunkowe stosujemy wszędzie tam, gdzie dalszy prze-bieg sterowania ma dwa warianty.

Przykład 9.

#include<s t d i o . h>int main ( ){

int a ;p r i n t f ( ”Podaj l i c z b ę : ” ) ;s can f ( ”%d”,&a ) ;i f ( a%2==0)

p r i n t f ( ” l i c z b a parzysta\n” ) ;else

p r i n t f ( ” l i c z b a n i e p a r z y s t a\n” ) ;return 0 ;

}

Page 38: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 38 z 78

Powrót

Full Screen

Zamknij

Koniec

Instrukcja warunkowa (2)if (<CL>)

<IN1>else

<IN2>

Sprawdzana jest wartość wyrażenia <CL>, w przypadku gdy jestróżna od zera wykonywana jest instrukcja lub instrukcja złożona<IN1>, w przeciwnym wypadku wykonywane jest <IN2>.

Page 39: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 39 z 78

Powrót

Full Screen

Zamknij

Koniec

Program Warunek Trójkąta

Problem: Napisać program sprawdzający czy z podanych trzechdługości można zbudować trójkąt.Wejście: liczby całkowite: a, b, cWyjście: odpowiedź TAK lub NIERozwiązanie:

• Wczytujemy 3 liczby ze standardowego wejścia.

• Należy sprawdzić warunki: a+b > c, a+c > b oraz b+c > a.

• Jeżeli wszystkie warunki są spełnione, drukujemy TAK, wprzeciwnym razie drukujemy na wyjście NIE.

Page 40: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 40 z 78

Powrót

Full Screen

Zamknij

Koniec

Program Warunek Trójkąta (2)

#i n c l u d e <s t d i o . h>int main ( ) {

int a , b , c ;s can f ( ”%d%d%d” , &a , &b , &c ) ;

i f ( a + b > c )i f ( b + c > a )

i f ( a + c > b )p r i n t f ( ”TAK” ) ;

else p r i n t f ( ”NIE” ) ;else p r i n t f ( ”NIE” ) ;

else p r i n t f ( ”NIE” ) ;return 0 ;

}

Page 41: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 41 z 78

Powrót

Full Screen

Zamknij

Koniec

Program Warunek Trójkąta(3)

us ing System ;pub l i c c l a s s Test {

pub l i c static void Main ( ) {int a , b , c ;s t r i n g s ;t ry {

s = Console . ReadLine ( ) ;a = int . Parse ( s ) ;s = Console . ReadLine ( ) ;b = int . Parse ( s ) ;s = Console . ReadLine ( ) ;c = int . Parse ( s ) ;i f ( a + b > c && b + c > a && a + c > b )

Console . WriteLine ( ”TAK” ) ;else Console . WriteLine ( ”NIE” ) ;

}catch ( Exception e ) {

Console . WriteLine ( ”Nie podano l i c z b y ” ) ;}

}}Zastąpienie kolejnych warunków jednym, spójnik logiczny && (lo-giczne i).

Page 42: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 42 z 78

Powrót

Full Screen

Zamknij

Koniec

Częste błędy

Uwaga na niejednoznaczności:

#include<s t d i o . h>main (){

int a=3;i f ( a<2)

i f ( a>0) p r i n t f ( ”a=1” ) ;else p r i n t f ( ”a<=0” ) ;

}Do którego if odnosi się else? Zawsze używaj nawiasów klam-rowych, unikniesz wielu niepotrzebnych błędów.Kompilator oznajmia ten fakt programiście w następujący sposób(używając np. opcji -Wall):prb.c: In function ‘main’:prb.c:5: warning: suggest explicit braces

to avoid ambiguous ‘else’

Page 43: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 43 z 78

Powrót

Full Screen

Zamknij

Koniec

Wybór wielowariantowy

W sytuacji, gdy wybieramy spośród wielu możliwych wariantówpomocna może się okazać konstrukcja switch.

Page 44: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 44 z 78

Powrót

Full Screen

Zamknij

Koniec

Przykład 10.

#include<s t d i o . h>int main (){

char c ;p r i n t f ( ” podaj l i t e r ę : ” ) ;s can f ( ”%c” ,&c ) ;switch ( c ){case ’A ’ : case ’E ’ : case ’ I ’ :case ’O ’ : case ’U ’ : case ’Y ’ :

p r i n t f ( ”Wielka l i t e r a \n” ) ;case ’ a ’ : case ’ e ’ : case ’ i ’ :case ’ o ’ : case ’ u ’ : case ’ y ’ :

p r i n t f ( ”%c j e s t samogłoską\n” , c ) ; break ;default :

i f ( c<=’ z ’ && c>=’A ’ )p r i n t f ( ”%c j e s t spó łg ło ską\n” , c ) ;

else p r i n t f ( ” to n i e l i t e r a \n” ) ;i f ( c<=’Z ’ && c>=’A ’ )

p r i n t f ( ”Wielka l i t e r a \n” ) ;break ;

}return 0;}

Page 45: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 45 z 78

Powrót

Full Screen

Zamknij

Koniec

Wybór wielowariantowy 2switch (<CL>) {

case <LAB1>: <IN1>case <LAB2>: <IN2>........default <IN3>

}

Wyrażenie <CL> użyte jako selektor wyboru musi przyjmowaćwartości całkowite, etykiety muszą być stałymi całkowitymi.Wykonanie instrukcji switch-case:Wyrażenie porównywane jest kolejno z etykietami, jeżeli jedna zetykiet ma wartość wyrażenia, to wykonywane są instrukcje poniej następujące.Instrukcje po etykiecie default są wykonywane, jeżeli żadna zetykiet nie ma wartości równej selektorowi wyboru. Aby uniknąćsprawdzania kolejnych przypadków, stosujemy instrukcję break.

Page 46: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 46 z 78

Powrót

Full Screen

Zamknij

Koniec

Pętla whilewhile (<CL>)<IN>

Dopóki warunek po słowie while jest spełniony dopóty blok in-strukcji ograniczony {} będzie wykonywany.Trzeba zwrócić uwagę, by pętla miała prawidłowy warunek koń-ca i nie mogło zdarzyć się tak, iż będzie się ona wykonywać wnieskończoność. W ogólności problem stwierdzenia, czy programsię zatrzyma, czy też nie, jest trudny. Popatrzmy na poniższyprzykład.

Page 47: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 47 z 78

Powrót

Full Screen

Zamknij

Koniec

Przykład 11.

#include <s t d i o . h>int main ( ) {

int a , i =0;p r i n t f ( ”Podaj l i c z b ę całkowitą : ” ) ;s can f ( ”%d”,&a ) ;p r i n t f ( ”\n” ) ;while ( a>1) {

i f ( a%2) a=3∗a+1;else a=a /2 ;i ++;p r i n t f ( ”a=%d\n” , a ) ;

}p r i n t f ( ”\n Liczba i t e r a c j i : %d\n” , i ) ;return 0 ;

}Możemy zapytać, czy ta pętla się zawsze kiedyś zatrzyma. Jest toznany problem Collatz’a. Dotychczas nie udało się go rozwiązać.Problem ten jest szczególnym przypadkiem problemu stopu, októrym wiadomo, że jest niealgorytmiczny (wiemy, że nie istniejealgorytm, który go rozwiązuje).

Page 48: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 48 z 78

Powrót

Full Screen

Zamknij

Koniec

Wydruk dla a=7 :221134175226134020105168421liczba iteracji : 16

Page 49: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 49 z 78

Powrót

Full Screen

Zamknij

Koniec

Pętla for

Pętla for jest szczególnym przypadkiem pętli while. Zapisujemyją w postaci:for(<IN1>;<IN2>;<IN3>) <IN4>

gdzie: <IN1> zwykle inicjuje licznik pętli, <IN2> jest warunkiemkońca, <IN3> steruje licznikiem w każdym kroku, <IN4> jest in-strukcją lub blokiem instrukcji wykonywanym cyklicznie. Zwrotten jest równoważny zapisowi:<IN1>;while (<IN2>){<IN4>;<IN3>; }

Page 50: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 50 z 78

Powrót

Full Screen

Zamknij

Koniec

Pętla for (2)

Pętle for często stosujemy do powtarzania pewnych operacjiokreśloną liczbę razy, tak jak w przykładzie poniżej.

Przykład 12.

int main ( ){

int i ;for ( i =0; i <10; i++)

p r i n t f ( ” He l l o world ! %d times\n” , i ) ;return 0 ;

}

Page 51: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 51 z 78

Powrót

Full Screen

Zamknij

Koniec

Pętla do whiledo<IN>while (<CL>);

Tu najpierw wykonuje się instrukcje, a następnie oblicza wyraże-nie <CL> i jeśli jest prawdziwe, to następuje powrót do początkupętli.

Page 52: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 52 z 78

Powrót

Full Screen

Zamknij

Koniec

11. Jednostki leksykalneJednostki leksykalne (leksemy) są to niezależne, oddzielone sepa-ratorami (spacja, średnik, przecinek) fragmenty kodu źródłowe-go, np. int (typ zmiennej), scanf (identyfikator nazwa funkcjibibliotecznej), for, while (słowa kluczowe), "Ala" (literał).

Page 53: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 53 z 78

Powrót

Full Screen

Zamknij

Koniec

Identyfikatory

• Identyfikatory są to nazwy zmiennych lub funkcji.

• Identyfikator jest sekwencją liter, cyfr i znaków podkreślenia( ).

• Rozróżniane są małe oraz duże litery (ang. case sensitive).

• Pierwszy znak identyfikatora nie może być cyfrą.

• Identyfikator nie może być słowem kluczowym (słowem za-strzeżonym dla języka).

• Należy unikać stosowania nazw zaczynających się od (za-rezerwowane dla bibliotek).

Page 54: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 54 z 78

Powrót

Full Screen

Zamknij

Koniec

Słowa kluczowe

Podane poniżej napisy są w języku C słowami kluczowymi (niemogą być nazwami zmiennych i funkcji):char, int, float, double, enum, void,long, short, signed, unsigned,const, static, volatile, extern, register,struct, union,for, while, do, switch, case, default, if, elsebreak, continue, return, goto,inline, sizeof, typedef

Page 55: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 55 z 78

Powrót

Full Screen

Zamknij

Koniec

Literały

Literał to wartość wpisana bezpośrednio w kod programu.Każdy literał (np. liczba 2 występująca w wyrażeniu: x=2*x) maokreślony typ.

Literały całkowite

• 1234 - typ int

• 1234L - typ long int

• 1234U - typ unsigned int

• 1234UL - typ unsigned long int

• 012 - typ int, liczba w systemie ósemkowym (dziesiętnie: 10)

• 0x12 - typ int, liczba w sytemie szesnastkowym (dziesiętnie:18)

Page 56: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 56 z 78

Powrót

Full Screen

Zamknij

Koniec

Literały zmiennoprzecinkowe

• -314.15 - typ double (notacja dziesiętna z kropką)

• -3.1415e2 (lub -3.1415E2) - typ double (notacja wykładni-cza)

• użycie literki F lub L zmienia typ na float lub long doubleodpowiednio.

Literały znakowe i łańcuchowe

• ’a’ - typ char pojedynczy znak ujęty w pojedyncze apostrofy

• ”ala ma psa” - typ char * ciągi znaków ujęte w cudzysłowie

Page 57: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 57 z 78

Powrót

Full Screen

Zamknij

Koniec

12. Ważne pojęcia• literał,

• operator,

• pętla

• typ,

• zmienna,

Page 58: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 58 z 78

Powrót

Full Screen

Zamknij

Koniec

Zadania

Zadanie 4. Proszę przeczytać ze zrozumieniem fragment książkiomawiający poruszane zagadnienia bardziej szczegółowo. Mogą tobyć np. rozdziały 1, 2 i 3 z książki Kernighana i Ritchiego.

Zadanie 5. Napisz program, który wyznacza wartość: n! = 1 *2 * ... * n

Zadanie 6. Napisz program, który drukuje trójkąt z gwiazdek:****************

Zadanie 7. Napisz program, który wczytuje ze standardowegowejścia kolejne znaki – cyfry i tworzy z nich liczbę dziesiętną.

Page 59: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 59 z 78

Powrót

Full Screen

Zamknij

Koniec

Zadanie 8. Wskaż literały i określ ich typy w następującymprogramie

#include<s t d i o . h>int main ( ){

int a ;p r i n t f ( ”Podaj l i c z b ę : ” ) ;s can f ( ”%d”,&a ) ;i f ( a%2==0)

p r i n t f ( ” l i c z b a parzysta\n” ) ;else

p r i n t f ( ” l i c z b a n i e p a r z y s t a\n” ) ;return 0 ;

}

Page 60: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 60 z 78

Powrót

Full Screen

Zamknij

Koniec

13. Typy złożoneTypy złożone są to typy, które tworzy programista używającwbudowanych typów prostych i innych typów złożonych.

• tablice

• struktury

• unie

Page 61: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 61 z 78

Powrót

Full Screen

Zamknij

Koniec

Tablice

Tablica jest strukturą danych złożoną z określonej liczby elemen-tów tego samego typu. Przykładowo int T[5] jest deklaracją5-cio elementowej tablicy (wektora) typu int, wtedy kolejne ele-menty tablicy to T[0], T[1], T[2], T[3], T[4]. Dostęp do po-szczególnych elementów tablicy uzyskuje się poprzez użycie ope-ratora [ ] tak, jak w przykładzie poniżej:

Przykład 13.

for ( i=0 ; i<5 ; i++ )T[ i ]= i∗ i ;

Uwaga:W języku C indeks tablicy zawsze zaczyna się od 0. Takwięc w rozważanym przykładzie T[4] jest ostatnim elementemtablicy (a nie T[5]!).

Page 62: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 62 z 78

Powrót

Full Screen

Zamknij

Koniec

Tablice dwuwymiarowe

Można też tworzyć tablice dwu- i więcej wymiarowe. Na przykładdouble A[10][10];

jest deklaracją tablicy dwuwymiarowej o rozmiarze 10x10.Do elementów takiej tablicy odwołujemy się np:A[i][j]

Page 63: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 63 z 78

Powrót

Full Screen

Zamknij

Koniec

Znaki, łańcuchy znaków

Typ znakowy to char. Łańcuchy w języku C to tablice znaków(tablice typu char ).char z=’a’;char Tekst[]="Abc";

Instrukcje te deklarują zmienną znakową z, oraz łańcuch znakówTekst, oraz inicjują je. Wtedy T[0]=’A’, T[1]=’b’, T[2]=’c’oraz T[3]=’\0’ (znacznik końca łańcucha).W C i C++ typ znakowy jest typem całkowitym, tzn. zmienne zna-kowe można traktować tak, jak liczby całkowite równe ich kodomASCII.Ponadto na zmiennych znakowych można wykonywać działaniaarytmetyczne. Np.char x=’a’, y=’f’;x++;y=y+’A’-’a’;

Po tych instrukcjach zmienna x jest równa ’b’, zaś y jest równa’F’ (w zmiennej y litera została zamieniona na dużą).

Page 64: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 64 z 78

Powrót

Full Screen

Zamknij

Koniec

Typowe błędy

Należy pamiętać, że standardowo w C/C++ nie ma kontroli do-stępu do tablic.Jeśli odwołujemy się do elementu tablicy który nie istnieje np:

const int TAB SIZE=100;

int main (){int T[ TAB SIZE ] ;int n=5000;T[ n ]=0;return 0 ;

}To odwołanie do nieistniejącej komórki nie zostanie zasygnali-zowane w fazie kompilacji, a w fazie wykonania może przynieśćnieoczekiwane efekty. Najprzyjemniejszym jest komunikat syste-mowy:Naruszenie ochrony pamięciW systemie SPOJ błąd ten jest sygnalizowany przez komunikat:runtime error (SIGSEGV).

Page 65: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 65 z 78

Powrót

Full Screen

Zamknij

Koniec

Struktury

struct Punkt { /∗ typ zmiennej ∗/int wsp x , wsp y ;char ko l o r ;char znak ;

} ;

Utworzenie zmiennych:struct Punkt a,b;Dostęp do pól struktury:a.wsp_x = 1;a.kolor = 0;a.znak = ’c’;

Page 66: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 66 z 78

Powrót

Full Screen

Zamknij

Koniec

Konwersja typów

Operator konwersji (jawnej) ma postać(nazwa-typu) Operand

Konwersja niejawna zachodzi w sytuacji, gdy operandy danegooperatora są różnych typów, ogólna zasada mówi, że automatycz-nie wykonuje się tylko takie przekształcenia, dla których argumentzajmujący mniej pamięci jest zamieniany na argument zajmującywięcej pamięci (char na int, int na float) bez utraty informacji,np.:int a=5/2;float b = a/2;float c = (float)a/2; //a=? b=? c=?

Page 67: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 67 z 78

Powrót

Full Screen

Zamknij

Koniec

14. FunkcjePodczas pisania programu (implementacji algorytmu) zachodzipotrzeba wielokrotnego wykonywania tych samych operacji (in-strukcji) w różnych sytuacjach (dla różnych danych), np. znale-zienie najmniejszego elementu w ciągu liczb (w szczególnym przy-padku dwóch), posortowanie ciągu liczb, wyznaczenie rozwiązańrównania kwadratowego.W obrębie funkcji można zamknąć operacje wykonywane dlazadanych parametrów wejściowych, np. współczynniki równaniakwadratowego.W praktyce każdy (większy) program jest zbudowany z wielufunkcji (dobry styl programowania zaleca, wiele krótkich i czytel-nych funkcji), poprawia to przejrzystość i czytelność programu,zwiększa modyfikowalność, zapewnia oszczędność czasu (funkcjaraz napisana może być wielokrotnie wykorzystana i jednokrotnietestowana).

Page 68: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 68 z 78

Powrót

Full Screen

Zamknij

Koniec

Proste funkcje - przykłady

Funkcja obliczająca minimum dwóch liczb:

int min ( int a , int b) {i f ( a > b ) return b ;else return a ;

}Wykorzystanie funkcji w programie np.:x = min(a, b)

Page 69: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 69 z 78

Powrót

Full Screen

Zamknij

Koniec

Potęgowanie w Zp (modulo p)

Przykład 14.

int potega ( int b , int w, int p){// o b l i c z b do potegi w mod p

int wynik=1;

while (w>0){i f (w%2) wynik∗=b ;wynik%=p ;b∗=b ;b%=p ;w/=2;}return wynik ;

}

Page 70: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 70 z 78

Powrót

Full Screen

Zamknij

Koniec

Funkcje – deklaracja i definicja

Deklaracja funkcji, w odróżnieniu od definicji jest pojęciem lo-gicznym, stanowi informację dla kompilatora, że funkcja o okre-ślonej nazwie, typie parametrów może zostać użyta (ale nie musi!)w programie.int min(int a, int b);

Definicja funkcji określa natomiast co funkcja robi, stanowi za-tem zapis jakiegoś algorytmu, definicja funkcji, w odróżnieniuod deklaracji, powoduje przydzielenie obszaru pamięci, w którymznajduje się kod wynikowy funkcji.

int min ( int a , int b) {i f ( a > b ) return b ;else return a ;

}

Page 71: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 71 z 78

Powrót

Full Screen

Zamknij

Koniec

Parametry programu

Podobnie jak inne funkcje również main może pobierać argumen-ty. Są to parametry wywołania programu. W pierwszej kolejnościjest pobierana ich liczba typu int, a następnie lista argumentów.Poniższy program wypisze wszystkie argumenty wywołania.

Przykład 15.

int main ( int argc , char∗∗ argv ) {int i =0;for ( i =0; i<argc ; i++)

p r i n t f ( ”Argument numer %d : %s\n” ,i , argv [ i ] ) ;

}Na przykład, jeśli program ma domyślną nazwę a.out, to komen-da:./a.out test

Wypisze:Argument numer 0: ./a.outArgument numer 1: test

Widzimy, że argumentem o numerze 0 jest nazwa pliku wykony-walnego.

Page 72: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 72 z 78

Powrót

Full Screen

Zamknij

Koniec

Przekaz argumentów

Popatrzmy na prostą funkcję, która zwiększa argument o 1 i wy-pisuje go:

Przykład 16.

void i n c ( int a){a++;p r i n t f ( ” inc : a = %d\n” , a ) ;

}

int main (){int a ;a=0;inc ( a ) ;p r i n t f ( ”main : a = %d\n” , a ) ;return 0 ;

}Wynikiem działania programu będzie:inc: a = 1main: a = 0

Page 73: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 73 z 78

Powrót

Full Screen

Zamknij

Koniec

Komentarz

Może to być zaskoczeniem, ale zobaczmy po kolei co się dzie-je. Wartość zmiennej a w programie głównym zostaje ustawionana 0. Dalej wywoływana jest funkcja inc. Następuje przekazaniewartości parametru do funkcji. Tam wartość ta jest przechowa-na w zmiennej lokalnej a, ale uwaga nie jest to to samo a, cow main. Lokalna zmienna a zostaje zwiększona o jeden i wypi-sana jej wartość. Następnie wracamy do main, gdzie cały czasegzystuje zmienna a o wartości 0, ta wartość zostaje wypisana.Podsumowując w naszym przykładzie funkcja nie zmienia war-tości innych zmiennych niż jej zmienne lokalne. O takiej funkcjimówimy też, że nie powoduje efektów ubocznych, a taki sposóbprzekazu argumentów nazywamy przekazywaniem przez war-tość.

Page 74: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 74 z 78

Powrót

Full Screen

Zamknij

Koniec

Funkcje rekurencyjne

Funkcjami rekurencyjnymi nazywamy takie funkcje, które wywo-łują same siebie. Ilustracją może być poniższa funkcja nwd, któraoblicza największy wspólny dzielnik dwóch liczb, z których drugajest nie większa od pierwszej.

Przykład 17.

int nwdab( int a , int b) {i f ( ( a<=0)||(b<=0)) {

p r i n t f ( ” ty lko l i c z b y dodatnie\n” ) ;e x i t ( 1 ) ;}

i f ( a%b==0) return b ;else return nwdab(b , a%b ) ;

}

main ( ) {int a ;a=nwdab ( 4 8 , 2 7 ) ;p r i n t f ( ”%d\n” , a ) ;return 0;}

Page 75: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 75 z 78

Powrót

Full Screen

Zamknij

Koniec

15. Stałe i wyliczeniaDeklaracje zmiennychint cyfra = 7;char znak;char znak = ’o’;double a, b = 3.2e-1;

Deklaracje stałychconst double pi = 3.1415;const int liczba = 37;

Uwaga! Wartość zmiennych poprzedzonych kwalifikatorem constnie może być zmieniona w trakcie działania programu.Wyliczeniaenum dni {pn, wt, sr, czw, pt};/* domyślnie: 0, 1, 2, 3, 4 */enum rok {smoka = 1, koguta, malpy};/* kolejne =2, =3, ... */

Page 76: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 76 z 78

Powrót

Full Screen

Zamknij

Koniec

Standardowe pliki nagłówkowe

• assert.h – diagnozowanie programów

• ctype.h – klasyfikacja znaków

• errno.h – zmienne przechowujące informacje o błędach

• math.h – funkcje matematyczne

• signal.h – mechanizmy obsługi zdarzeń wyjątkowych

• stdio.h – funkcje wejścia oraz wyjścia

• stdlib.h – funkcje narzędziowe (przekształcanie liczb, opera-cje na pamięci)

• string.h – operacje na tekstach

• time.h – obsługa daty oraz czasu

Page 77: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 77 z 78

Powrót

Full Screen

Zamknij

Koniec

Biblioteka math – przykłady funkcji

• double sin(double x);

• float sinf(float x);

• double exp(double x);

• double log(double x);

• double pow(double x, double y);

Page 78: Podstawy Programowania - SPOX - Sphere Online Exercisesamw.spox.spoj.pl/media/upload/PP_Wyklad1.pdf · Sphere Online Judge (spoj.pl) ... edytory kodu (emacs, vim, notepad++, ...),

Zasady

Literatura

Dlaczego C?

Tworzenie . . .

Edycja kodu . . .

Kompilacja

Debugowanie

Ważne pojęcia:

Typy i zmienne

Sterowanie

Jednostki leksykalne

Ważne pojęcia

Typy złożone

Funkcje

Stałe i wyliczenia

Strona główna

Strona tytułowa

JJ II

J I

Strona 78 z 78

Powrót

Full Screen

Zamknij

Koniec

Zadanie 9. Proszę przeczytać ze zrozumieniem fragment książkiomawiający te zagadnienia bardziej szczegółowo. Mogą to być np.:rozdziały 1–4 książki Kernighana i Ritchiego.