1 / 90

Część wstępna

Podstawy programowania w języku C i C++. Tematy : Makrodefinicje, operacje na znakach. Instrukcje warunkowe if … else; switch. Instrukcje iteracji: while, do…while, for. Cele nauczania : Podstawowe zasady programowania . Praktyczna znajomość elementów programowania w języku C/C++

khoi
Download Presentation

Część wstępna

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Podstawy programowania w języku C i C++.Tematy: Makrodefinicje, operacje na znakach. Instrukcje warunkowe if … else; switch. Instrukcje iteracji: while, do…while, for. Cele nauczania: Podstawowe zasady programowania. Praktyczna znajomość elementów programowania w języku C/C++ Docelowo : Opracowanie algorytmu wybranego zadania geodezyjnego i przedstawienie go w postaci schematu blokowego. Opracowanie programu w wybranym języku programowania Wykonanie dokumentacji programu . Szczegółowe dla lekcji: Zapoznanie się z makrodefinicjami, podstawowymi operacjami na znakach, instrukcjami warunkowymi i instrukcjami iteracji. Praktyczne wprowadzanie, uruchamianie i kompilacja programów z tymi instrukcjami. Cele operacyjne lub szczegółowe cele kształcenia Po zakończeniu lekcji uczeń będzie umiał: stosować podstawowe proste makrodefinicje i operacje na znakach w C oraz instrukcje warunkowe i iteracje.

  2. Część wstępna Część wstępna - organizacyjna: przywitanie, sprawdzenie obecności, wpisanie tematu lekcji. - Część merytoryczna  Ogniwo 1. Uświadomienie uczniom celów– pogadanka Celem zajęć jest zapoznanie się z pojęciem makrodefinicji, podstawowymi operacjami na znakach i łańcuchach znaków oraz instrukcjami warunkowymi if…else, switch i iteracyjnymi: while, do…while, for. Po 2 lekcjach : wpisuje i uruchamia programy, stosując proste makrodefinicje, operacje na znakach i instrukcje warunkowe oraz iteracyjne.

  3. Ogniwo 2Poznanie nowych faktów – pogadanka • W języku C i C++ można stosować dyrektywy preprocesora #define - tzw. makrodefinicje – stałe symboliczne i makrorozwiniecia. • Stała symbolicznajest nazwą zastępującą łańcuch znaków. Może być stała numeryczna, znakowa lub tekstowa. Np. #define PI=3.141596. • Do podejmowania decyzji w programie służą instrukcje warunkoweif, if…else oraz instrukcja wyboru switch…case. • Do organizacji obliczeń cyklicznych stosuje się pętlewhile, do…while, for, instrukcję zaniechania break, kontynuowania continue.

  4. Ogniwo 3. Kształtowanie pojęć, poznawanie, systematyzowanie wiedzy - Przypomnienie podstawowych elementów języka C: Programy w C mają rozszerzenia plików C a w C++ rozszerzenie CPP. Po skompilowaniu program ma rozszerzenie EXE. Polecenia kończymy średnikiem. Kod funkcji umieszcza się w nawiasach klamrowych. Rozróżniane są w C duże i małe litery. Stałe oznaczamy zwykle dużymi literami. W definicji poprzedzone słowem const Komentarze typu /* … */ w C i C++ mogą być wielo-liniowe oraz typu // w jednej linii w C++ Program zawiera zawsze: funkcję main(). Na końcu funkcji main jest zwykle return 0;. Zwykle program zawiera nagłówek jako komentarz,, dyrektywy preprocesora , zwłaszcza #include, czasem #define – stałe i makroinstrukcje. Przed funkcją główną mogą być zadeklarowane lub zdefiniowane stałe, zmienne globalne oraz funkcje. Zmienna musi być zadeklarowana prze użyciem. Aby zatrzymać program, używamy funkcji getch();. Do czyszczenia ekranu służy funkcja clrscr();. W tekście możemy używać tzw. znaków specjalnych, np. przejście do następnej linii \n. Program składa się z ciągu instrukcji rozdzielonych średnikami Instrukcje położone są pomiędzy słowami kluczowymi { i } Instrukcje mogą zawierać wyrażenia oraz wywołania funkcji. Wyrażenia składają się ze stałych, operatorów i identyfikatorów (nazwa stałych, zmiennych, funkcji). Identyfikatory są nazwami obiektów składających się na program. Mogą one zawierać litery, cyfry i znaki podkreślenia, nie mogą jednak zaczynać się od cyfr. Mogą zaczynać się od liter lub znaku _

  5. Podstawowe typy danych w jezyku C • W języku C każda zmienna ma swój typ, który musi być określony przed pierwszym użyciem. • Istnieją wbudowane i zdefiniowane przez użytkownika typy danych. • W języku C wyróżniamy następujące podstawowe wbudowane typy zmiennych. • char – typ znakowy - jednobajtowe liczby całkowite, służy do przechowywania znaków (1 Bajt); • int- liczby całkowite - typ całkowity, o długości domyślnej dla danej architektury komputera (2 B); • float – liczby rzeczywiste - typ zmiennopozycyjny (zwany również zmiennoprzecinkowym), reprezentujący liczby rzeczywiste (4 Bajty); • double – liczby rzeczywiste - typ zmiennopozycyjny podwójnej precyzji (8 B); • Specyfikatory – signed, unsigned, short, long - słowa kluczowe, które zmieniają znaczenie • short - liczby całkowite krótkie • long - liczby całkowite długie • long double - liczby zmiennoprzecinkowe podwójnej precyzji długie

  6. Typy zmiennych, zakresy, rozmiar, zapis Zapis liczb: dziesiętne, z kropką dziesiętną i ewentualnie E (postać m*10^c)ósemkowe z 0 na początku, szesnastkowe z 0x na początku.

  7. Operatory można pogrupować wg cech funkcjonalnych na grupy: • operatory arytmetyczne: +, -, *, /, % (dzielenie modulo - reszta) • operatory porównania – relacyjne: ==, !=, <, >, <=. >+ • operatory logiczne: && (and), || (or), ! (not) • operatory bitowe • operatory przypisania: =, += (a=+b  a=a+b), -=, *=, /+, %=… • operatory unarneinkrementacji i dekrementacji: ++, --np. x++; x--; ++x; --x; • operatory rozmiaru: sizeof(obiekt) • operatory konwersji: (nazwa typu) wyrażenie • operator warunkowy: Op1 ? Op2: Op3; • operator przecinkowy: Op1, Op2, ..., Opn • operatory wskazywania->

  8. Najczęściej używane operatory:

  9. Inne operatory: • Operator przecinkowy (,), stosowany w instrukcjach cyklu fora także w wywołaniach funkcji. Para wyrażeń oddzielonych operatorem obliczana jest od lewej do prawej. Rezultatem jest wyrażenie po prawej stronie. Ogólny zapis: wyrażenie po lewej, wyrażenie po prawej Instrukcja for z operatorem przecinkowym: for (wyr1; wyr2; wyr3a; wyr3b) { instrukcje}np.int i, j; for(i=0; j=10; j>=0; i++; j--) {printf(„\n %2i %2i %6.3f %6.3f, i, j, sqrt((double) i), sin((double) j)); } Przykład wywołania funkcji: f(a, b, (k=2, k+7), d) – wywołanie funkcji z 4 argumentami, trzeci ma wartość 9. • Operatory wskazywania:&operator adresu, - adres zmiennej np. &count– adres zmiennej count*operator adresowania pośredniego, .operator składowej, ->operator wskaźnikowy składowej • Operatory wejścia >> i wyjścia << w C++

  10. Priorytety operatorów, kolejność wykonywania działań: • Nawiasy mają najwyższy priorytet. • Mnożenie i dzielenie mają pierwszeństwo przed dodawaniem i odejmowaniem.Dzielenie jest równoprawne z mnożeniem. • W przypadku jednakowego priorytetu operatorów o priorytecie decyduje kolejność ich występowania w wyrażeniu – od lewej do prawej strony.

  11. Instrukcje wejścia i wyjścia w języku C: Wejście i wyjście programu • Do podstawowych funkcji języka C, umożliwiających komunikację z otoczeniem należą: dla operacji wyjścia: putchar, puts, printf; dla operacji wejścia: getchar, gets, scanf; • W DOS, wynikiwysyłane na ekran mogą być przy pomocy znaku potokuwysłane do pliku lub na drukarkę.Np. program.exe > Wynik.txt do pliku, usunięcie istniejącegoprogram.exe >> wyniki.txt do pliku – dopisanie do istniejącegoprogram.exe > PRN na drukarkę

  12. Kody sterujące /* Program dzwonki.c */ #include <iostream.h> #include <conio.h> #define BELL 7 #define DZWONEK '\007' void main() { int a, b, c; putchar ('\a'); getch(); putchar('\007'); getch(); putchar('\7'); getch(); putchar('\x7'); getch(); putchar(DZWONEK); getch(); putchar(BELL); getch(); } • Kody sterujące: kod nowego wiersza: \n np. puchar(‘\n’); kod tabulacji: \t kod powrotu karetki \r Kod cofania \b kod wysunięcia strony \f kod dzwonka \a putchar(‘\a’); lub \007 • Znaki specjalne: \’ – wyświetla apostrof, \” – cudzysłów, \\ - backslash, \007 – dzwonek

  13. Funkcja printf() - uniwersalna • Funkcje puts() i puchar() mogą wyświetlić tylko jedną rzecz: łańcuch znaków lub znak i nie mogą wyświetlić wartości liczbowych. • Funkcja printf() jest bardziej uniwersalna. Może wyświetlić dane dowolnego typu i współpracować z wieloma argumentami. • Wyprowadza wynik przetwarzania w różnych formatach. • printf (łańcuch_sterujący, lista _danych_argumentów); lub inaczej printf(ciag_formatujący, lista parametrów); • Ciąg formatujący jest zwykłym ciągiem znaków do wyświetlenia na ekranie. Jednak niektóre znaki mają funkcję specjalną i nie zostaną one po prostu wyświetlone. Takim właśnie znakiem jest znak % . Gdy funkcja printf() go napotka to wie, że po nim wystąpi określenie rodzaju argumentu i formatu jego wyświetlenia na ekranie. /* Przykład: getchar1.c */ #include <stdio.h> #include <conio.h> int main(void) { int inicjal; puts("Podaj swoj inicjal "); inicjal=getchar(); putchar(inicjal); putchar('\n'); printf("Twoj inicjal to %c. Jego kod ASCII: %i ",inicjal, inicjal); getch(); }

  14. Formaty realizowane przez funkcję printf()(znaki typu w łańcuchach formatujących)

  15. Wyprowadzanie danych w języku C++: cout << • Polecenie cout z operatorem wyjścia<< , czyli cout << • W C++ poza powyższymi istnieje dodatkowy sposób wyprowadzania informacji wszystkich typów:Instrukcja cout<< wyświetla wartości literałów, stałych i zmiennych bez konieczności korzystania ze specyfikatorów formatowania. • Do wykorzystania polecenia cout należy w dyrektywie #include wyspecyfikować plik iostream.h • Polecenie cout języka C++ #include <iostream.h> cout << lista_danych; // np. cout << "Masz " << wiek << "lat " << ‘\n’; cout << „łańcuch”; // cout << "Cześć, nazywam się Jan Nowak. My się znamy " cout << nazwa_stałej; // char nazwisko[]=”Jan Nowak”; cout << nazwisko; cout << nazwa_zmiennej; // cout << wiek;

  16. Operacje wejścia wprowadzanie danych w C i C++ • Do wczytywania danych stosuje się instrukcjegetchar(), gets(), scanf() w C i C++ oraz cin >> w C++ • Funkcja gets() służy do wczytania pojedynczej linii. Np. char linia[80]; gets(linia); • getchar umożliwia wprowadzenie pojedynczego znakuNp. char znak; znak=getchar(); putchar(znak); • scanf() to uniwersalna funkcja do wprowadzania wszelkiego typu informacji. Składa się z łańcucha sterującego i listy danych. scanf(„lancuch_sterujacy”,lista_danych);Np. float ilosc; scanf(„%f”,&ilosc);Łańcuch sterujący zawiera specyfikatory formatowania – jak będą interpretowane dane wejściowe. • Specyfikatory formatowania: %d– wprowadza liczbę całkowitą, %u – liczba bez znaku, %f– liczba float, %e – liczba w systemie wykładniczym, %g– liczba dziesiętna w najkrótszym zapisie, %c– dana znakowa char, %s– łańcuch znaków,%o– liczba ósemkowa, %x– liczba szesnastkowa

  17. Specyfikatory formatowania • %d – wprowadza liczbę całkowitą, • %u – liczbę całkowitą bez znaku, • %f – liczba rzeczywista typu float, • %c – znak, • %s – łańcuch, • %o - liczba ósemkowa, • %x – liczba szesnastkowa, • %e – liczba w zapisie wykładniczym, • %g – liczba dziesiętna w najkrótszym zapisie. • Wzorzec konwersji określa typ zmiennej, którą wpiszemy z klawiatury lub wypiszemy na ekranie.

  18. Tabela: deklaracje zmiennych określonego typu, wzorce konwersji, przykłady /* Program kalk1.c – prosty kalkulator, dane liczby całkowite*/ #include <stdio.h> #include <conio.h> int main() /* funkcja główna */ { int a,b; /* deklaracja zmiennych całkowitych a i b */ int suma,roznica,iloczyn; float iloraz; /* deklaracje zmiennych */ clrscr(); /* kasowanie ekranu */ printf("Prosty kalkulator\n"); /* nagłówek */ printf("\nPodaj liczbe a: "); scanf("%d",&a); /* wczytanie liczby a */ printf("Podaj liczbe b: "); scanf("%d",&b);/* wczytanie liczby b */ suma=a+b; roznica=a-b; iloczyn=a*b; /* obliczenia */iloraz=(float)a/(float)b; /* operator rzutowania w dzieleniu */ printf("\nWyniki dzialan:\n"); printf("\nSuma: %d ",suma); printf("\nRoznica: %d ",roznica); printf("\nIloczyn: %d ",iloczyn); printf("\nIloraz: %f ",iloraz); getch(); return 0 ; }

  19. Podsumowanie: operatory, instrukcje wejścia, wyjścia • Podstawowe typy danych: char, int, float, long double specyfikatorylong, signed, unsigned, short, long. • Zapis liczb dziesiętnych, ósemkowych, szesnastkowych, znaków, kody sterujące (\n, \t, \f, \a – BEL, \r, \0 – nul, \’ itd.) Operatory: arytmetyczne, zwiększania i zmniejszania ++, --, relacyjne : <, <=, >, >=, ==, !=, logiczne(!, && - and, || - lub), przypisania=, wieloznakowe operatory przypisania (a#=b; czyli a=a#b; np. a+=b; a=a+b:), operator rozmiarusizeof, operator konwersji(typ) wyrażenie, np. (float) (21/10);operator warunkowy wyr_warunkowe ? wyr_na_tak: wyr_na_nie (np. z = (a>b)? a:b; /* z=max(a,b) */ • Instrukcje wejścia wyjścia: Wyświetlenie na ekranie: puchar(znak) – znak, puts(napis) - łańcuch znaków, printf(„łańcuch formatu”, argumenty); Wyprowadzanie wyników w C++: cout << lista, np. cout << „Wynik: „ << cout a << endl;Wprowadzanie danych: znak=getchar() – pojedynczy znak; gets(zmienna_łańcuchowa); - napis (do klawisza Enter),scanf(„łańcuch sterujący”, lista_danych) – uniwersalna funkcja do wprowadzania informacji wszelkiego typu.Wprowadzanie danych w C++: cin >> zmienna

  20. Podsumowanie – wejście, wyjście, liczby, zmienne, wzorce konwersji • Aby wczytać liczbę należy użyć funkcji scanf w postaci: scanf("wzorzec",&zmienna); • Aby wypisać wczytaną w ten sposób liczbę należy użyć funkcji printf, która służy do wypisywania komunikatów. Postać funkcji: printf("Komunikat wzorzec",zmienna); • W funkcji scanf zawsze przed nazwą zmiennej używamy znaku &, a nie robimy tego przy używaniu funkcji printf. • Zmienna służy do przechowania danych, których wartość ustala się w trakcie działania programu i może być zmieniana. • Każda zmienna musi być zadeklarowana przed jej użyciem jako zmienna odpowiedniego typu: int, float, char itp. • Do wypisywania komunikatówsłuży funkcja printf, lub puts a do wczytywania zmiennych funkcja scanf. • Do poprawnego użycia obu funkcji należy znać podstawowe wzorce konwersji: %d, %f, %s.

  21. Preprocesor, dyrektywy, funkcje biblioteczne C Preprocesor przetwarza wiersze programu rozpoczynające się znakiem #. Taki wiersz nazywamy dyrektywą preprocesora. Podstawową dyrektywą jest #include, umożliwiająca dołączenie do programu pliku o podanej nazwie. Ma 2 postacie: #include <nazwa> i #include „nazwa” Nazwa w nawiasach kwadratowych oznacza plik nagłówkowy dostępny w systemie C, natomiast w cudzysłowieplik zdefiniowany przez użytkownika. W C istnieje duża biblioteka funkcji standardowych, czyli dostępnych bezpośrednio w systemie. Zawarte są w tzw. modułach. Moduły biblioteczne dołącza się przez instrukcję#include <nazwa>. Standardowo dołączamy stdio.h w C a iostream.h w C++ Procedura clrscr() zawarta w module conio.h umożliwia wyczyszczenie ekranu. W math.h zdefiniowane jest np. M_PI (czyli PI) Dyrektywa #define , np. #define NMAX 20 definiuje stałą NMAX o wartości 20.

  22. Stałe symboliczne Stała symbolicznajest nazwą zastępującą ciąg znaków #define NAZWA tekst Np. #definePI 3.1415926 #defineMIEJSCOWOSC Sosnowiec #defineWYNIK printf(("Pole=%d\f %”,pole1) #defineWZOR1 (a*b)

  23. Stałe symboliczne - makrodefinicje • Stała symboliczna jest nazwą przedstawiającą inną stałą - numeryczną, znakową lub tekstową. Definicję stałej symbolicznej umożliwia instrukcja #define:#define NAZWA tekstgdzie NAZWA jest nazwą stałej symbolicznej, a tekst jest związanym z tą nazwą łańcuchem znaków • Przykłady:Makrodefinicje proste: #define identyfikator <ciąg-jednostek-leksykalnych> #define PI 3.14159 #define TRUE 1 #define FALSE 0 #define NAPIS1 Siemianowice #define IMIE "Andrzej" // (puts(IMIE) rozwija w tekst puts("Andrzej") #define IMIE_I_NAZWISKO IMIE+"Zalewski" #define WCZYTAJ_IOSTREAM_H #include <iostream.h>

  24. Makrodefinicje parametryczne • #define identyfikator(idPar1, idPar2,...) ciąg_jedn_leksykalnych •  Np. • #define ILORAZ(a,b) ((a)/(b)) //- makrodefinicja ILORAZ – parametry a i b w nawiasach! • #define SUMA(a,b)((a)+(b)) • W trakcie kompilacjinazwy stałych symbolicznych są zastąpione przez odpowiadające im łańcuchy znaków. Ułatwia to parametryzację programu, a także umożliwia zastępowanie często niewygodnych w pisaniu sekwencji programu, tworzenie makrodefinicji

  25. Szablony programu dla ucznia – dane wpisane w #define /* zmienne globalne - stale, zmienne */ constdoublepi=3.14159265; constchar szkola[]="Sztygarka"; /* Przykladowa funkcja - deklaracja */ float suma1(float l1, float l2); /* ========== Funkcja główna * ======== */ int main() { clrscr(); printf("Program: %s \n",PROGRAM); KRESKA2; puts(NAZWISKO); puts(KLASA); puts(SZKOLA); KRESKA; /* -- dalszy kod programu głównego */ /* -------------------------------------------- */ KONIEC; getch(); return 0; } /* =========== Funkcje - definicje ======= */ float suma1(float l1, float l2) /* Definicja funkcji */ { return(l1+l2); } /* Program Szablon1.c */ /* #include - włączenia tekstowe bibliotek */ #include <stdio.h> /* prawie zawsze np. do printf() */ #include <conio.h> /* np. do getch() */ #include <math.h> /* #define - stale makroinstrukcje */ #define PROGRAM "program.c" #define NAZWISKO "Nowak Jan" #define ROK 2011 #define SZKOLA "Sztygarka" #define KLASA "2BG" #define NL printf("\n"); #define TAB putchar('\t'); #define PI 3.141592653 #define KRESKA puts("------------------------------") #define KRESKA2puts("================"); #define KONIEC puts("\n\nNacisnij cos ")

  26. Szablon programu do obliczeń geodezyjnych /* zmienne globalne - stale, zmienne */ const double pi=3.14159265; const double rograd=63.66197724, rostop=57.2957795130823; /* Ro[grad]=200/PI, Ro[stopn]=180/PO const char szkola[]="Sztygarka"; /* Przykladowa funkcja - deklaracja */ float suma1(float l1, float l2); /* ========== Funkcja glowna * ======== */ intmain() { clrscr(); printf("Program: %s \n",PROGRAM); KRESKA2; puts(NAZWISKO); puts(KLASA); puts(SZKOLA); KRESKA; printf("63.66198[grad]=%f[rad]",KATRAD(rograd)); /* -- dalszy kod programu, głównego. -- */ KONIEC; getch(); return 0; } /* =========== Funkcje - definicje ======= */ float suma1(float l1, float l2) /* Definicja funkcji */ { return(l1+l2); } /* Schemat programu do obliczeń geodezyjnych */ /* Program Szablgeo.c */ /* preprocesor: #include - wlaczenia tekstowe bibliotek */ #include <stdio.h> /* prawie zawsze c C, np. do printf() */ #include <conio.h> /* np. do getch() */ #include <math.h> /* #define - stale makroinstrukcje */ #define PROGRAM "program.c" #define NAZWISKO "Nowak Jan" #define ROK 2011 #define SZKOLA "Sztygarka" #define KLASA "2BG" #define NL printf("\n"); #define TAB putchar('\t'); #define PI 3.141592653 #define ROG 63.66197724 #define ROS=57.2957795130; #define KRESKA puts("------------------------------------------------") #define KRESKA2puts("============================="); #define KONIEC puts("\n\nNacisnij cos ") #define KATRAD(g) ((g)/(ROG)) #define KATGRAD(r) ((r)/(ROS))

  27. Stałe wyliczeniowe (enumeration constant) • Stałe wyliczeniowe tworzą zbiór stałych o określonym zakresie wartości. • Wyliczenie jest listą wartości całkowitych, np.enumboolean {NO, YES};Pierwsza nazwa na liście wyliczenia ma wartość 0, następna 1 itd., chyba że nastąpi jawnie podana wartość. • Przykłady:enumKOLOR {CZERWONY, NIEBIESKI, ZIELONY, BIAŁY, CZARNY}enum KOLOR {red=100, blue, green=500, white, black=700}; red przyjmiewartość 100, blue 101, green 500, white 501, black 700

  28. Operacje na znakach i łańcuchach znaków • Typy znakowe: - deklaracja: char zmienna; pojedynczy znak: char znak; np. char zn1=‘a’; char litera; litera = ‘F’;łańcuch znaków (napis, słowo) • char *napis; np. char *str1=„Programowanie”; • char napis[n]; np. char linia[80]; gets(linia); char imie[20]; scanf("%s",imie); • np.char napis[]="Tekst”, np. char pozdrowienie="Jak się masz” • Wzorzec konwersji przy wyświetleniu lub wczytywaniu zmiennej typuchar • %cdla pojedynczego znaku (łańcucha jednoznakowego) np. char znak1; scanf("%c",&znak1); • %s dla łańcucha dłuższego niż 1 znaknp. char slowo2[20]; scanf("%s",slowo2);

  29. /* Program znaki1.c */ #include <stdio.h> #include <conio.h> #include <string.h> main (void) { char znak1,znak2,znak3; //deklaracja znaków char slowo1[10], slowo2[15]; char slowo3[]="Adam"; // definicja clrscr(); // czyszczenie ekranu znak1='a'; // inicjalizacja zmiennej znak1 znak2=102; // znak w postaci kodu dziesiętnego ASCII - litera f printf("Podaj znak3: "); scanf("%c",&znak3); // podajemy jakiś znak printf("\nPodaj slowo1: "); scanf("%s",slowo1); // wpisujemy słowo 1 printf("\nPodaj slowo2: "); scanf("%s",slowo2); // wpisujemy słowo 2 printf("\nZmienne zawieraja znaki: "); printf("znak1 (a), znak2 (102), znak3 (wprowadzony): %c %c %c ",znak1,znak2,znak3); printf("\noraz slowa: "); printf("slowo1, slowo2, slowo3: %s %s %s ",slowo1, slowo2, slowo3); getch(); return 0 ; }

  30. Przypisanie wartość zmiennej znakowej i napisom • Przypisać wartość zmiennej jednoznakowej możemy na kilka sposobów: • w apostrofach: zmienna='a'; • poprzez przypisanie kodu znaku: zmienna=97; • poprzez wczytanie znaku z klawiatury funkcją scanf():scanf("%c",&zmienna); • Przypisanie wartości do zmiennej dla łańcucha znaków dłuższego niż jeden znak odbywa się podobnie jak w pierwszym przypadku, z tą jednak różnicą, że zamiast apostrofów ' należy używać cudzysłowia "char slowo3[]="Adam"; // definicja

  31. Odczytanie długości łańcucha znaków – strlen(lancuch) /* dluglanc.c */ #include <stdio.h> #include <conio.h> #include <string.h> main (void) { int dlugosc; char *lancuch; clrscr(); lancuch="Adam Nowak"; dlugosc=strlen(lancuch); printf("Lancuch '%s' ma: %d znaków \n",lancuch, dlugosc); printf("Pierwsza litera łańcucha to: %c \n",lancuch[0]); printf("Ostatnia litera łańcucha to: %c \n",lancuch[dlugosc-1]); getch(); return 0 ; }

  32. Inne funkcje operujące na łańcuchach: strlwr, strupr, strcat, strrv, streset – z biblioteki string.h strcat() - łączy dwa łańcuchy, strcmp() - porównuje dwa łańcuchy rozróżniając małe i duże litery, strlwr() i strupr() - zamienia w danym łańcuchu duże litery na małe i odwrotnie, strrev() - odwraca kolejność znaków w łańcuchu, strset() - wypełnia łańcuch danym znakiem. /* znaki5.c - operacje na tekstach */ #include <stdio.h> #include <conio.h> #include <string.h> main (void) { char *lancuch1, *lancuch2, *lancuch3; char znakwyp='x'; // znak wypełniający clrscr(); puts("Operacje tekstowe\n"); lancuch1="Janusz"; lancuch2="Kowalski"; printf("Lancuch1 to: %s \n",lancuch1); printf("Lancuch2 to: %s \n",lancuch2); printf("\nZmieniamy duze litery na male: \n"); strlwr(lancuch1); printf("Lancuch1 wyglada teraz tak: %s \n",lancuch1); printf("\nZmieniamy male litery na duze: \n"); strupr(lancuch2); printf("Lancuch2 wyglada teraz tak: %s \n",lancuch2); printf("\nLaczymy dwa lancuchy: \n" ); lancuch3=strcat(lancuch1,lancuch2); printf("Lancuch3 wyglada teraz tak: %s \n",lancuch3); printf("\nOdwracamy kolejnosc znakow w lancuchu: \n" ); strrev(lancuch3); printf("Lancuch3 wyglada teraz tak: %s \n",lancuch3); printf("\nWypelniamy lancuch znakiem 'x':\n" ); strset(lancuch3,znakwyp); printf("Lancuch3 wyglada teraz tak: %s \n",lancuch3); getch(); return 0 ; }

  33. Podsumowanie – znaki, łańcuchy znaków • Zmienne liczbowe mogą zawierać się w pewnych zakresach, których nie można przekraczać. • Deklaracja zmiennej znakowej: char znak; a zmiennej łańcuchowej: char *slowo; • Wartość zmiennej znakowej można przypisać w programie poprzez umieszczenie znaku w apostrofach lub przez napisanie jego kodu. • Wartość zmiennej łańcuchowej można przypisać w programiepoprzez umieszczenie napisu w cudzysłowie. • Zmienne znakowe i łańcuchowe można wczytywać z klawiatury używając funkcjiscanf() i odpowiednich wzorców konwersji: %s dla ciągu znaków i %c dla pojedynczego znaku. • Każdy znak posiada swój kod ASCII. • Kod ASCII mają również znaki nie przedstawione na klawiaturze komputera. np. ß, ö. • Łańcuch, który wygląda jak liczba nie jest liczbą. Istnieją funkcje, które potrafią przekonwertować łańcuch liczbowy do postaci liczby. • Mając dany łańcuch, możemy odczytać dowolny jego znak używając nawiasów kwadratowych. Pierwszy wpisany znak ma numer0, a nie 1. • Każdy ciąg kończy znak'\0'. • Długość łańcucha można ograniczyć przy deklaracji, np.: char slowo[10]; • Łańcuchy można ze sobą porównywać, łączyć, odwracać w nich kolejność liter, zmieniać małe litery na duże i odwrotnie, a także przeszukiwać, kopiować na siebie itp. Nazwy funkcji, które to wykonują zawsze zaczynają się na 'str' (z angielskiego: string).

  34. Zasięg zmiennej • Zmienne globalne- obejmujące zasięgiem cały program – mogą być dostępne dla wszystkich funkcji programu. Deklaruje się je przed wszystkimi funkcjami programu: • Zmienne globalne, jeśli programista nie przypisze im innej wartości podczas definiowania, są inicjalizowane wartością 0. • Zmienne lokalne – o zasięgu obejmującym pewien blok.Zmienne, które funkcja deklaruje do “własnych potrzeb” nazywamy zmiennymi lokalnymi. • Pytanie: Czy jest błędem nazwanie tą samą nazwą zmiennej globalnej i lokalnej?. Nie. Natomiast w danej funkcji da się używać tylko jej zmiennej lokalnej. Tej konstrukcji należy, unikać. int a=1; /* zmienna globalna */ int main() { int a=2; /* to już zmienna lokalna – gdyby nie ta definicja to a =1 */ printf("%d", a); /* wypisze 2 (gdyby nie było powyższej instrukcji to 1)*/ }

  35. Biblioteki, procedura, funkcja • Biblioteki (moduły) - zapisane są w nich różne funkcje i procedury do użycia w programie. • Funkcja - jest to podobnie jak procedura, pewien wyraz, który nie dość że coś wykona to również zwróci nam rezultat tego co zrobił, przykładowymi funkcjami są: pierwiastkowanie, sinus, cosinus. Zwracaną wartością niekoniecznie musi być liczba może to być również inny rodzaj zmiennych.

  36. Typy char (C)bool, string (C++) • TYP ZNAKOWY - CHAR - typ ten przyjmuje dowolny pojedynczy znak o kodach ASCII (0..255) np. znak ‘A’ czy ‘!’ • W C łańcuchy reprezentuje się jako tablice znaków char slowo[dlug] a operacje na nich wykonuje z użyciem wskaźników. • TYP LOGICZNY - bool- typ ten może przyjmować jedynie dwie wartości: true (prawda) – 1 lub false (fałsz) - 0 #include <stdbool.h> int main(){ bool b = false; b = true;} • W C++ oprócz tradycyjnych ciągów znaków w stylu C istnieje w bibliotece standardowej klasa std::string. Ukrywa ona niewygodne aspekty używania napisów w stylu C: zarządzanie pamięcią, określanie długości, łączenie napisów, wstawianie, usuwanie i inne manipulacje na napisie. Dodatkowo pozbyto się problemu znaku kończącego - znak o kodzie \0.

  37. INSTRUKCJE STERUJĄCE • PODEJMOWANIE DECYZJI W PROGRAMIE • Instrukcja warunkowaif…else; • Instrukcja wyboruswitch • ORGANIZACJA OBLICZEŃ CYKLICZNYCH - INSTRUKCJE PĘTLI: • Instrukcja pętli while • Instrukcja pętli do … while • Instrukcja pętli for

  38. Instrukcja warunkowaif… [else...] • Pozwala nawykonanie lub zaniechanie wykonania pewnych czynności, w zależności od konkretnego warunku logicznego. • Instrukcja ma następującą składnię: if (warunek) instrukcja;np. if (x>30) y=20;If (warunek) {instrukcja_1; instrukcja_2; … instrukcja_N;}np. if (min <x) {min=x; nr=i;} • Instrukcja ta sprawdza czy jest spełniony warunek postawiony po „if",jeżeli tak to wykonywana jest instrukcja lub ciąg instrukcji w nawiasach { } • Można jeszcze też użyć słowa else oznaczającego "w przeciwnym wypadku”If (warunek) instrukcja_1; else instrukcja_2; np. if (a>0) c=b+2; else c=b-3;If (warunek) {instrukcja_1; instrukcja_2; … instrukcja_N;}else {instrukcja_A; instrukcja_B; … instrukcja_Z;}

  39. jesli Warunek to Instrukcja; if (W) I; // if1a.c – instrukcja if #include <stdio.h> #include <conio.h> #include <math.h> Int main (void) { float liczba1, x; clrscr(); x=0; printf("Podaj liczbe dodatnia: \n"); scanf("%f",&liczba1); if (liczba1 >=0) x=sqrt(liczba1); printf ("Pierwiastek z %f = %f", liczba1, x); getch(); return 0 ; }

  40. jeśli W to Instrukcja1 w przeciwnym przypadku Instrukcja2;  if (W) I1; else I2; // program if1.c #include <stdio.h> #include <conio.h> Int main () { int liczba1,liczba2; clrscr(); printf("Podaj pierwszą liczbę: \n"); scanf("%d",&liczba1); printf("Podaj drugą liczbę: \n"); scanf("%d",&liczba2); if (liczba2==0) // operator == printf("Nie wolno dzielić przez 0!\n"); else printf("Wynik dzielenia: %f\ n", (float) liczba1/liczba2); getch(); return 0 ; } // program if1b.cpp #include <iostream.h> int Latka; intmain() { cout << "Program dla dorosłych \n Ile ty masz lat?\n"; cin >> Latka; if(Latka < 18) cout << "Jesteś, małolatem \n"; elsecout << "Jesteś dorosły; \n"; return 0; }

  41. /* Program if1c.c język C */ #include <stdio.h> #include <conio.h> int main() { int a; printf("Podaj liczbe calkowita >0 "); scanf("%d",&a); if (a<=0) return 1;/* wyjście awaryjne z systemu */ printf("OK! a = %d >=0",a); getch(); return 0; } Przykłady programów z if /* Program If1cpp. cpp C++*/; #include <iostream.h> #include <conio.h> int main() {int a; cout << "Podaj liczbe calkowita >0 "; cin >> a; if (a<0) return 1; //wyjscie awaryjne z systemu cout << "OK"; getch(); return 0; // wyjscie normalne} /* Program If-else1.cpp */; #include <iostream.h> #include <conio.h> int main() { int a; cout << "Podaj liczbe calkowita > 0 ==> "; cin >> a; if(a<0) cout << "a < 0"; elsecout << "a >=0 "; getch(); return 0; } /* Program if-else1.c */; #include <stdio.h> #include <conio.h> int main() { int a; puts("Podaj liczbe calkowita > 0 "); scanf("%i", &a); if (a<=0) printf("a = %d <= 0",a); elseprintf("a = %d >= 0",a); getch(); return 0; }

  42. Ogólna składnia if.. else if(warunek_logiczny) { instrukcje_do_wykonania } else if (inny_warunek_logiczny) { instrukcje_do_wykonania } else{ instrukcje_do_wykonania } • Po słowie kluczowym if, w nawiasie umieszcza się warunek. Jeśli jest prawdziwy, program przechodzi do wykonywania kodu w klamrach. Co jeśli warunek jest fałszywy? Wtedy program sprawdza kolejne warunki (każdy następny to już nie if, lecz else if) aż do napotkania wartości prawdziwej, po której wykonywany jest kod w klamrach. Jeśli wszystkie wartości będą fałszywe, program wykona kod umieszczony w klamrach po instrukcji else.

  43. // Program if2.cpp C++ #include <iostream.h> int main() { int wiek = 0; char a; cout << "Podaj ile masz lat "; cin >> wiek; if (wiek > 18) // Jeśli wprowadzona liczba jest większa od 18 { cout << "Jesteś już dorosły!" << endl; } else if(wiek < 18) // Jeśli wprowadzona liczba jest mniejsza od 18 { cout << "Nie jesteś jeszcze dorosły!" << endl; } else// Jeśli wprowadzona liczba jest równa 18 { cout << "Masz równo 18 lat więc jesteś już dorosły!" << endl; } cin >> a; // wprowadzenie jakiegoś znaku return 0; }

  44. Przykładowy program - zagnieżdżone instrukcje if - obliczenie podatku /* Program podatek.c */ #include <stdio.h> /* brackets.c */ voidmain() { floatincome; printf("Podaj sumę przychodów: "); scanf("%f", &income); if(income < 20000.00) puts("Podatek wynosi 15%"); else// >= 20000 if(income < 100000.00) // [20000, 100000) puts("Podatek wynosi 22%"); else// od 100000 puts("Podatek wynosi 35%"); }

  45. Instrukcja ifi operatory  logiczne: && (and), || (or), !(not) • Mogą one przyjmować wartościtrue czyli 1 lub 0 czyli falseZa ich pomocą możemy skonkretyzować nasz warunek. Np. if (warunek1) && (warunek2) instrukcja; • Operator &&(koniunkcja) sprawia, że instrukcja zostanie wykonana tylko w przypadku gdy spełnione są oba warunki. Gdybyśmy zastąpili go operatorem || (alternatywa), to wystarczyłby tylko jeden spełniony. • Drugi przypadekif (! Warunek) instrukcja;W tym przypadku instrukcja będzie wykonana jeśli warunek nie jest spełniony (ma wartość false). Do tego właśnie służy operator ! (czyli negacja).

  46. if (a !=0) { if (delta<0) cout << "Delta ujemna - brak rozwiazan.\n" ; else if (delta==0) cout << "x= " << (-b+sqrt(delta))/(2*a); else if (delta>0) { cout << "x1= " << (-b+sqrt(delta))/(2*a) << endl; cout << "x2= " << (-b-sqrt(delta))/(2*a) << endl; } } else { if ((a==0) && (b==0)) cout << "Rownanie ma nieskonczenie wiele rozwiazan."; else if ((a==0) && (b!=0)) { cout << "Rownanie o podaneych wspolczynnikach jest liniowe.\n"; cout << "jego pierwiastek jest rowny: " << -c/b << endl; } } getch(); return 0; } Równanie kwadratowe a*x2 + b*x +c = 0 Instrukcje: if (a !=0) if (delta==0 … else if ((a==0) && (b==0)) … if ((a==0) && (b!=0)) /* program rowkwadr.cpp */ #include <iostream.h> #include <conio.h> #include <math.h> int main() { float a, b, c, delta; clrscr(); cout << "Program oblicza pierwiastki rownania kwadratowego." << endl; cout << "Podaj wspolczynniki: " << endl; cout << "a= " ; cin >>a; cout << "b= "; cin >> b; cout << "c= "; cin >> c; delta=b*b-4*a*c;

  47. If - podsumowanie • Jeżeli do rozpatrzenia mamy kilka przypadków, stosujemy instrukcję warunkową if. • Instrukcję zapisujemy: if (warunek) instrukcja1; else instrukcja2; • Dla więcej niż jednej instrukcji należy zgrupować je za pomocą nawiasów klamrowych. • W warunku logicznym instrukcji if zawsze stosujemy operator porównania ==, a nie przypisania =. • Jeśli jednocześnie powinno być sprawdzone kilka warunków, łączymy je za pomocą operatorów logicznych && (and) , || (or) lub ! (nie)

  48. Instrukcja switch - instrukcja wyboru • Instrukcja switch jest wykorzystywana kiedy zachodzi konieczność podjęcia kilku decyzji, gdy wykonanie różnych części programu jest uzależnione od stanu pewnej zmiennej. • Podstawą podjęcia decyzji jest wyrażenie typu całkowitego, znakowego lub logicznego • Instrukcja switch ma postać: switch (zmienna lub wyrażenie) {case wartosc_1: Instrukcje_1; break; // break nie musi być.................... case wartosc_N: Instrukcje_N; break;default Instrukcje_domyslne; }

  49. Instrukcja wyboru switch dla wielu warunkówswitch – case – przypadek W spośród (I1, I2, … In)

More Related