Podstawy programowania. Tomasz Tyksiński. Rok akademicki 2014/15



Podobne dokumenty
1 Podstawy c++ w pigułce.

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

Część 4 życie programu

1 Podstawy c++ w pigułce.

Podstawy Programowania C++

I - Microsoft Visual Studio C++

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

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

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

3. Instrukcje warunkowe

Instrukcje sterujące

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

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

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Pliki. Informacje ogólne. Obsługa plików w języku C

Wstęp do Programowania, laboratorium 02

Struktura pliku projektu Console Application

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Proste programy w C++ zadania

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

Język ludzki kod maszynowy

Argumenty wywołania programu, operacje na plikach

4. Funkcje. Przykłady

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

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

do instrukcja while (wyrażenie);

Programowanie strukturalne i obiektowe

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

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

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

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

Programowanie komputerowe. Zajęcia 1

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

Algorytm. a programowanie -

C++ wprowadzanie zmiennych

Programowanie - wykład 4

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

Podstawy Programowania

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

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

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

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

Algorytmika i programowanie. dr inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

7. Pętle for. Przykłady

Programowanie - instrukcje sterujące

I. Podstawy języka C powtórka

Wstęp do programowania. Wykład 1

Pytania sprawdzające wiedzę z programowania C++

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

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

Definicje. Algorytm to:

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

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

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Wstęp do informatyki- wykład 7

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

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

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

WHILE (wyrażenie) instrukcja;

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Lab 9 Podstawy Programowania

Podstawy programowania w języku C

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Programowanie w języku Python. Grażyna Koba

WHILE (wyrażenie) instrukcja;

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Języki programowania - podstawy

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

lekcja 8a Gry komputerowe MasterMind

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

1. Napisz program wypisujący w kolejnych wierszach standardowego wyjścia pojedyncze słowa następującego napisu Bardzo dlugi napis. 2.

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

1 Powtórzenie wiadomości

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

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

Instrukcje sterujące mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012

Podstawy programowania w C++

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

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

Pliki. Informacje ogólne. Obsługa plików w języku C

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

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

Pliki wykład 2. Dorota Pylak

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Wstęp do programowania

Transkrypt:

Rok akademicki 2014/15

Podstawy programowania Tematyka zajęć 1. Zapis algorytmu Sieci działań Przykłady zapisu algorytmu w postaci sieci działań 2. Podstawowe elementy języka wyższego rzędu Typ danych Stałe i zmienne Instrukcja przypisania Elementarne instrukcje wejścia wyjścia 3. Wyrażenia i operatory Wyrażenia logiczne i arytmetyczne Liniowy zapis wyrażeń Pierwsze programy 4. Sterowanie przebiegiem programu Instrukcje warunkowe oraz instrukcje wyboru z wielu Przykłady zastosowań 5. Organizacja obliczeń cyklicznych Pętle 6. Procedury i funkcje Przekazywanie parametrów Zmienne lokalne, ukrywanie informacji Funkcje biblioteczne 7. Złożone typy danych Tablice Przykładowe algorytmy przetwarzania tablic Łańcuchy znaków 8. Pliki Literatura 1. N. Wirth, Wprowadzenie do programowania systematycznego. WNT Warszawa 1978. 2. J. Grębosz, Symfonia C++, Oficyna Kallimach, Kraków 1993. 3. A. Struzińska-Walczak, K. Walczak, Nauka programowania dla początkujących. C++, W&W 1999 4. B. Eckel, Thinking in C, Beta 3 2006. 5. B. Eckel, Thinking in C++, Wydawnictwo Helion, 2002 2

1. Zapis algorytmu Algorytm to sposób wykonania konkretnego zadania, składa się z danych na których wykonywane będą operacje, wyniku działania oraz szczegółowego opisu kolejno wykonywanych działań prowadzących do rozwiązania. Dane określające operacje przetwarzania Dane wejściowe Komputer Dane wyjściowe Komputer przetwarza dane wejściowe w dane wyjściowe zgodnie z zadanym algorytmem. W algorytmie możemy wyróżnić dwie części składowe: - opis używanych w algorytmie obiektów - opis czynności wykonywanych na tych obiektach w określonej kolejności Obiekty mogą być proste (liczby, znaki) lub złożone (tablice, struktury). Czynności również mogą być proste (logika, arytmetyka) lub złożone (funkcje, procedury). Algorytm można zapisać na trzy sposoby: - schemat blokowy (inaczej nazywany siecią działań) - pseudokod - język programowania Schemat blokowy przedstawia zapis algorytmu w postaci graficznej. Składa się z bloków (skrzynek) opisujących kolejne działania powiązanych w sieć za pomocą strzałek. Będziemy wykorzystywać następujące skrzynki: 3

Drugim sposobem zapisu algorytmu jest pseudokod. Jest to zapis w języku pośrednim między językiem naturalnym i sztucznym (komputerowym). Zrozumiały dla człowieka ale nieprzydatny dla komputera. Ostatnim sposobem jest zapisanie algorytmu w konkretnym języku programowania, w naszym przypadku będzie to język programowania C/C++. Prawidłowo skonstruowany algorytm musi spełniać następujące warunki: - skończoność działanie algorytmu musi zakończyć się po skończonej liczbie kroków - określoność każdy algorytm musi być dokładnie określony, ujęte wszystkie możliwe przypadki - postulat wejścia alg. powinien posiadać pewną liczbę danych wejściowych do zapoczątkowania obliczeń - postulat wyjścia alg. powinien posiadać jedno lub więcej danych wyjściowych, wynik operacji - efektywność wszystkie operacje powinny być dostatecznie proste, możliwe do wykonania Zapisz za pomocą schematu blokowego poniższe algorytmy 1. Wczytać dwie liczby a, b oraz wywnioskować ich zależność (tzn. czy a<b, a>b, a=b). 2. ZADANIE DOMOWE: Porównać trzy różne liczby a, b, c, następnie wypisać je w kolejności rosnącej. 3. ZADANIE DOMOWE: Odgadywanie wieku użytkownika przez komputer. Użytkownik odpowiada tylko TAK/NIE. 4. Obliczanie NWD dwóch podanych liczb a i b. Algorytm Euklidesa. 4

2. Podstawowe elementy języka wyższego rzędu 1. Środowisko Dev-C++ - Darmowe środowisko programistyczne, istnieje również w wersji Portable, zalecana wersja programu 4.9.9.2 (Bloodshed). Do pobrania ze strony z zajęciami. - Uruchamianie - Nowy projekt - Menu: Plik, Nowy, Projekt, Console Application - Wybieramy projekt C++ - Po wybraniu projektu C++ dostajemy szablon programu w języku C++ #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { system("pause"); return EXIT_SUCCESS; } - Menu Plik: Zapisz projekt jako, Zapisz, Zamknij projekt, Zakończ - Warto zapisywać każdy projekt w osobnym folderze o sensownej nazwie - Menu Uruchom: - Kompiluj, Ctrl+F9 wygeneruj program uruchamialny (preprocesor, kompilator, asembler, linker) - Uruchom, Ctrl+F10 po wygenerowaniu programu, można go uruchomić - Kompiluj i uruchom, F9 nowa kompilacja po zmianach i uruchomienie - Przebuduj wszystko, Ctrl+F11 kompilacja wszystkich plików składowych projektu - Parametry przekazanie dodatkowych parametrów uruchomieniowych z poziomu systemu operacyjnego 2. Struktura programu w C/C++ - Kompilator rozróżnia wielkość liter - Funkcja main() musi wystąpić stąd zaczyna się przetwarzanie programu - Zagnieżdżanie komend { } nawiasy klamrowe - Komentarze: - // - komentarz do końca linii - /* */ - komentarz wewnątrz programu 3. Podstawowe typy zmiennych - typy proste: - Typy całkowite: int, char - Typ rzeczywisty: float, double - Modyfikatory: long, long long, short; signed, unsigned - Deklaracje zmiennych: [modyfikator(y)] typ nazwa; - Definicje zmiennych: [modyfikator(y)] typ nazwa = wartość; - Definicje stałych: const [modyfikator(y)] typ nazwa = wartość; Czy stałą można modyfikować? - Zapis wartości: n[l, l, U, u], 0xn, 0n, n., n.m[l, l, F, f] - Operacja podstawienia: zmienna = wartość; /* NIE := */ - Gdzie można deklarować zmienne i zasięg zmiennej 5

int a=3; int a=3; { { int a=4; a=4; a=a+1; //tu a jest równe 5 a=a+1; //a jest 5 } ALE } a=a+1; //tu a jest równe 4 a=a+1 //a jest 6 1. Sprawdzić rozmiar zmiennych różnych typów w bajtach oraz zakresy ich wartości. Wykorzystaj materiały na stronie www.cplusplus.com 2. Które modyfikatory nie łączą się z jakimi typami, przykładowo long float. 3. Czy można pominąć typ danych, a zostawić sam modyfikator, co się wtedy stanie? 4. Podstawowe operacje wejścia/wyjścia w języku C++ - Biblioteka strumieni: iostream.h - Wypisywanie na ekranie: cout << łańcuch << zmienna << endl; - Wczytywanie z wejścia cin >> zmienna; 4. Wypisać na ekranie swoje imię. 5. Napisać program wypisujący liczbę π z różną precyzją. Precyzja liczb zmiennoprzecinkowych, wykorzystaj manipulatory dla strumieni wyjścia: setw, precision, setprecision, iomanip.h Opis manipulatorów można znaleźć na stronie www.cplusplus.com w sekcji Input/Output 6. Wypisać na ekranie kilka znaków specjalnych np.? \ Poszukać innych znaków specjalnych. 7. Wczytać naraz kilka liczb, a następnie wypisać je na ekranie. Wypróbować różne typy. 6

3. Wyrażenia i operatory 1. Operatory arytmetyczne - Podstawowe działania na zmiennych całkowitych: +, -, *, /, % Sprawdzić jak działa operator / - Podstawowe działania na zmiennych rzeczywistych: +, -, *, / - Inkrementacja i dekrementacja: unarne operatory ++ i --. Mogą być postfiksowe lub prefiksowe (i++, ++i). i++ i=i+1 i-- i=i-1 - Kolejność wykonywania działań. - Wyrażenia w C++ mają zapis liniowy. 1. Wczytać dwie liczby z klawiatury i podać ich sumę, różnicę itp. 2. Zapisz poniższe wyrażenia w języku C++ ab b a a b a d d a b 1 b a d c c a d d 1 ( c) b a d 1 c b 3. Napisz program obliczający wszystkie cztery wartości, dla wczytanych wartości zmiennych a, b, c, d. Porównaj wyniki z sąsiadem dla tych samych danych wejściowych. 4. Jakie wartości przyjmą zmienne c i d po wykonaniu poniższego fragmentu kodu int a=2, b=3; c = (a++) + (b++); a=2; b=3; d = (++a) + (++b); Wyjaśnij odpowiedź. 5. ZADANIE DOMOWE: Napisać program obliczający objętość stożka, po podaniu przez użytkownika wysokości stożka oraz średnicy podstawy. Jakiego typu zmienne wykorzystasz? 2. Operatory logiczne - relacje: ==,!=, >, <, >=, <= - operatory:!, &&, - Przypisania: Operatory dwuargumentowe w postaci a = a op b można zapisać w prostszej postaci a op= b. Gdzie op może być równe: +, -, *, /, %, <<, >>, &, ^, 6. ZADANIE DOMOWE: Jakie są priorytety poszczególnych operatorów. 7. Napisz program wypisujący tablice logiczne poniższych wyrażeń logicznych (jeżeli wyrażenie jest prawdziwe to napisz 1, jeżeli jest fałszywe to wypisz 0) p q p q p q p q (p q) (r p) 7

4. Sterowanie przebiegiem programu 1. Instrukcja dowolne poprawne wyrażenie zakończone średnikiem. 2. Instrukcja warunkowa if (wyrażenie) // MUSI być nawias, jeżeli wartość numeryczna wyrażenia Instrukcja1 // różna od 0 to wykonywana jest Instrukcja1 [else // instrukcja kończy się średnikiem Instrukcja2] // w przeciwnym razie Instrukcja2 3. Stosuje się również uproszczoną wersję instrukcji wyboru: wyrażenie1? wyrażenie2 : wyrażenie3 1. Wczytać dwie liczby całkowite i wypisać je w kolejności niemalejącej. 2. ZADANIE DOMOWE: Wczytać trzy liczby całkowite i wypisać je w kolejności niemalejącej. 3. Program sprawdzający czy podana liczba n jest parzysta czy nieparzysta. 4. Rozwiązywanie równania liniowego a x + b = 0 dla wczytanych wartości a i b. Wartości zmiennych nie tylko całkowitoliczbowe. 5. Napisz program obliczający pierwiastki rzeczywiste równania kwadratowego, po podaniu parametrów a, b, c. UWAGA: Programy uzupełnij o czytelny interfejs użytkownika, wypisuj co należy wpisać, opisuj wyniki na ekranie. Pamiętaj w kodzie programów o używaniu wcięć w instrukcjach oraz pisaniu komentarzy. Powinieneś zacząć od zaplanowania rozwiązania w postaci schematu blokowego lub pseudokodu. Pisz program dopiero jak opracujesz poprawny algorytm! 6. Za pomocą instrukcji warunkowej? : napisać program liczący wartość bezwzględną liczby całkowitej. Najprostsza postać: int x=(x>0? x : -x); 4. Instrukcja wyboru switch (wyrażenie){ case wyrażenie-stałe: instrukcje case wyrażenie-stałe: instrukcje [default: instrukcje] } Należy jawnie przerwać wykonywanie instrukcji (słowo kluczowe break), bo inaczej zostaną również wykonane następne instrukcje. 7. Co wypisze program po naciśnięciu klawiszy: a b c: char c=getch(); switch(c){ case 'a': cout << "a"; case 'b': cout << "b"; default: cout << "?"; } Dlaczego i jak go poprawić by działał dobrze? 8

8. Napisz program wczytujący liczbę całkowitą n i wypisujący czy jest ona ujemna, równa zero czy dodatnia. Jakiego typu należy użyć? Czy można użyć instrukcji switch? 9. Napisz program wczytujący liczbę całkowitą dodatnią n i wypisujący czy jest ona mniejsza lub równa 10, większa od 10 ale mniejsza lub równa 100, większa od 100 ale mniejsza lub równa 1000, większa od 1000. Czy można użyć instrukcji switch? 9

5. Organizacja obliczeń cyklicznych 1. Pętle służą do cyklicznego powtarzania pewnego bloku instrukcji. Porównaj do algorytmu Euklidesa w którym cyklicznie dokonywano odejmowania. Proces powtarzania kończy się w ściśle określonym momencie. W zależności od miejsca i rodzaju warunku zatrzymującego cykl obliczeń wyróżniamy w C trzy rodzaje pętli. 2. Pętla while while (wyrażenie) // Najpierw obliczana jest wartość wyrażenia, instrukcja // jeżeli różna od 0 to nadal wykonuj instrukcja // Koniec gdy wyrażenie równe 0 Oczywiście zamiast pojedynczej instrukcji można użyć bloku instrukcji, czyli wykorzystać nawiasy klamrowe. while (wyrażenie) // Najpierw obliczana jest wartość wyrażenia, { instrukcja1 // jeżeli różna od 0 to nadal wykonuj instrukcje instrukcja2 instrukcja3 // Koniec gdy wyrażenie równe 0 } 1. Napisz program wypisujący 20 znaków * w jednej linii. 2. Napisz program wypisujący n znaków * w jednej linii, gdzie n jest podane przez użytkownika. 3. Napisz program wypisujący liczby całkowite od 1 do n, gdzie n jest podane przez użytkownika. 4. Napisz program wypisujący liczby całkowite od n do 1, gdzie n jest podane przez użytkownika. 5. Napisz program wypisujący parzyste liczby całkowite z zakresu od 1 do n, gdzie n jest podane przez użytkownika. 3. Pętla do-while do //najpierw wykonuje instrukcję, a następnie oblicza wyrażenie, Instrukcja //jeżeli różne od 0 to wraca, jeżeli równe 0 to koniec while(wyrażenie); 6. Wykorzystując pętlę do napisz program wypisujący sumę liczb całkowitych z zakresu od 1 do n, gdzie n jest podane przez użytkownika. 7. Napisz program wypisujący iloczyn liczb całkowitych z zakresu od 1 do n, gdzie n jest podane przez użytkownika. Sprawdź zakres wyników. Jakiego typu zmiennych należy użyć. Jaką funkcję matematyczną oblicza ten program? 8. ZADANIE DOMOWE: Napisz ponownie programy z poprzednich zadań (1-7) używając odwrotnego rodzaju pętli. 10

4. Pętla for Jest odmianą pętli while upraszczającą często jej zapis. Z reguły używana w przypadku znanej z góry liczby powtórzeń. for(wyrażenie1; wyrażenie2; wyrażenie3) instrukcja Należy ją czytać jako: wyrażenie1; // wartość początkowa (zazwyczaj przypisanie) while(wyrażenie2) // sprawdzenie warunku kontynuacji { // (zazwyczaj wyrażenie warunkowe) instrukcja wyrażenie3; // modyfikacja licznika (zazwyczaj przypisanie) } Wyrażenia można pomijać (pętla nieskończona: for(;;){...}) 9. Za pomocą pętli for wypisz liczby całkowite od n do n, po podaniu wartości n. 10. Napisz program wypisujący na ekranie prostokąt złożony z gwiazdek, wymiaru m x n. Wartości m, n podane przez użytkownika. Zmodyfikuj program by wypisywał kwadrat n x n. Przykład dla m = 3, n = 4 **** **** **** 11. Napisz program wypisujący trójkąty wymiaru n x n złożone z gwiazdek (połówki kwadratu do przekątnej). Wartość n podana przez użytkownika. Rozważ wszystkie możliwe rodzaje trójkątów. Przykład dla n=3: * ** *** *** ** * *** *** *** *** *** *** 12. ZADANIE DOMOWE: Napisz zadania 1-8 za pomocą pętli for. 11

Poniższe zadania napisz z wykorzystaniem dowolnego rodzaju pętli. 13. ZADANIE: Napisz program wypisujący kody ASCII naciśniętego klawisza, aż do momentu naciśnięcia ESC (27dec, 1Bhex). Wypisuj też ile już klawiszy naciśnięto: i klawisz? ma numer n.. Stałe ASCII o numerze i oznaczamy \0i (i - ósemkowo) lub \xi (i szesnastkowo) Wykorzystaj rzutowanie typów podczas wypisywania wartości kodów ASCII. W języku C rzutowanie ma postać: (typ)zmienna; W języku C++ rzutowanie ma postać: static_cast<typ>(zmienna); 14. Napisać menu wyboru postaci: Proszę wybrać opcję i nacisnąć ENTER: 1)... 2)... 3)... 4) Wyjście. Wybierz: _ Po wybraniu 1-3 program wypisuje wybraną opcję, po wybraniu 4 kończy działanie nic nie robiąc, po wybraniu dowolnej innej wartości sygnalizuje błąd. Po wypisaniu wybranej opcji czeka na naciśnięcie klawisza i znów wypisuje menu. 15. ZADANIE DOMOWE: Napisz algorytm Euklidesa obliczający NWD(a, b), po podaniu przez użytkownika liczb a i b. 16. Program rozkładający podaną liczbę n liczbę na czynniki pierwsze. 12

6. Funkcje 1. Definicja Opis działania funkcji, algorytm. Składa się z - specyfikatorów (extern funkcja dostępna poza modułem programu z jej definicją, static dostępna tylko w module programu gdzie ją zdefiniowano, inline dla małych funkcji kompilator nie umieszcza skoku do wywołania funkcji ale całe ciało funkcji w miejscu jej wywołania) - typ wyniku funkcji - identyfikator funkcji, czyli nazwa - lista deklaracji argumentów w nawiasach okrągłych (bez średnika na końcu) - ciało funkcji w nawiasach klamrowych Jeżeli funkcja zwraca wartość to następuje to przez wywołanie instrukcji return wartość; 2. Argumenty Argumenty funkcji są przekazywane przez wartość. Aby zmienić argumenty to należy je przekazać przez wskaźnik (w języku C) lub referencję (w języku C++). np. void suma(int a, int b, int wynik) { wynik=a+b; // tu jest OK., ale na zewnątrz nie zwróci wartości } 1. Zmodyfikuj funkcję Suma by zwracała prawidłowo wynik sumy dwóch liczb. 2. Napisz funkcję WartoscBezwzgledna. Jakie typy danych należy użyć. Czy można zdefiniować dwie funkcje na różnych typach danych? 3. Napisz funkcję obliczającą objętość stożka. Jakie parametry ma funkcja? 4. Napisz funkcję sprawdzającą czy podana liczba n jest parzysta czy nieparzysta. Jakie wartości powinna zwracać ta funkcja. Wykorzystaj ją do programu wypisującego parzystość podanej liczby. Powtórz wypisywanie aż do podania wartości zerowej. 5. Zmodyfikuj funkcję Suma by zwracała wynik przez parametr Wynik. Wykorzystaj referencje. 13

7. Tablice 1. Pojęcie tablicy Jest to złożony typ danych przechowujący jednocześnie kilka wartości tego samego typu. Dostęp do poszeczególnych wartości jest swobodny. Elementy tablicy są ponumerowane (indeksowane). Pierwszy element tablicy ma zawsze indeks równy 0. W momencie deklarowania zmiennej tablicowej decydujemy o jej rozmiarze. Jest to maksymalna liczba danych którą można przechować w tablicy. Deklaracja: typ_danych nazwa_zmiennej[rozmiar]; PRZYKŁADY: int liczby[10]; // tablica 10 liczb całkowitych float rzeczywiste[100]; // tablica 100 liczb rzeczywistych char znaki[256]; // tablica 256 znaków Dostęp do danych w tablicy uzyskujemy przez podanie indeksu elementu w nawiasie kwadratowym. PRZYKŁADY: liczby[0]=10; rzeczywiste[99]=r; znaki[1]= A ; 1. Wstaw do tablicy liczby 10 kolejnych liczb parzystych, zaczynając od 0. Następnie wypisz wszystkie elementy tablicy wraz z indeksami. Na ekranie powinna się pojawić informacja typu: tablica[0] = 0 2. Wstaw do tablicy rzeczywiste kolejne wyniki funkcji sin(x) dla wartości x całkowitych od 0 do 99. Wypisz elementy tablicy po wstawieniu. 3. Wstaw do tablicy znaki wszystkie znaki ASCII, następnie wypisz z tej tablicy wszystkie litery małe i wielkie. 4. Napisz program zamieniający podaną liczbę dziesiętną na zapis w postaci binarnej (dwójkowej). Wykorzystaj w tym celu tablicę liczb całkowitych. 2. Tablice wielowymiarowe Skoro elementem tablicy może być dana dowolnego typu, w szczególności elementem tablicy może być również tablica. Zatem int tablica[3][5]; oznacza trzyelementową tablicę złożoną z 5 elementowych tablic, czyli macierz o 3 wierszach i 5 kolumnach. 0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2 3,0 3,1 3,2 4,0 4,1 4,2 Odwołania do elementów podobnie jak w jednowymiarowych tablicach, tylko używamy podwójnego indeksowania tablica[0][0] = 1; tablica[1][2] = 2; 14

tablica[i][j] = w; Można podobnie jak tablice jednowymiarowe inicjować je konkretnymi wartościami int tablica[3][5]={0,0,0,0,0,1,1,1,1,1,2,2,2,2,2}; 15 kolejnych elementów tablicy, albo czytelniej int tablica[3][5]={{0,0,0,0,0},{1,1,1,1,1},{2,2,2,2,2}}; 3 wiersze po 5 elementów. Można oczywiście tworzyć tablice o bardziej złożonej strukturze float wyniki[100][2][3]; co oznacza 100 elementów tablicowych wymiarów 2x3. 5. Znajdywanie minimum w tablicy dwuwymiarowej, wczytaj najpierw wymiary tablicy, potem dane do tablicy podanych rozmiarów. Jak sprawdzać zakres wymiarów, jak dobrać wymiar tablicy? 6. Program obliczający sumę dwóch macierzy. 7. ZADANIE DOMOWE: Program dokonujący transponowania macierzy. 3. Łańcuchy W języku C łańcuch to po prostu tablica znaków o danym rozmiarze, dane łańcucha zakończone są zawsze znakiem ASCII o numerze 0. char tekst[256] Skoro tablica jest równoważna wskaźnikowi możemy łańcuch również traktować jako wskaźnik do typu char char *tekst; Jednak wtedy trzeba osobno rezerwować pamięć na przechowanie tego łańcucha. 8. Napisz funkcję zwracającą długość podanego jako parametr łańcucha (przykładowo: dla Ala zwróci 3). 9. Napisz funkcję zmieniającą na odwrotną kolejność znaków w podanym jako parametr łańcuchu (przykładowo: zamieni Ala na ala ). 10. ZADANIE DOMOWE: Napisz funkcję która będzie zamieniać pierwsze litery w kolejnych słowach łańcucha na wielkie (przykładowo: ala ma kota na Ala Ma Kota ). W języku C++ wprowadzono nowy typ łańcuchowy string, jest to podejście obiektowe do obsługi łańcuchów. string tekst; cin >> tekst; cout << Podałeś napis: << tekst << endl; 11. Napisz program wczytujący do zmiennej tekst dowolny tekst z klawiatury, wraz ze spacjami. Program po wczytaniu ma wypisać liczbę wprowadzonych znaków oraz wczytany łańcuch. 15

Przykładowo: Podaj tekst: Ala ma kota Wczytano: 11 znaków Podałeś: Ala ma kota 12. Dodaj do powyższego programu funkcję odwracającą kolejność znaków z zadania 9, a następnie wypisz podany tekst od końca Przykładowo: Odwrotnie: atok am ala 13. Napisz program przechowujący w tablicy 20 danych osobowych (imię, nazwisko, płeć, wiek). Uzupełnij program o funkcję: dodającą osobę na końcu, wypisującą wszystkie podane osoby. Możesz stworzyć proste menu wyboru. Przykładowo: Baza osób 1. Dodaj osobę 2. Wypisz osoby 3. Zakończ Wybierz opcję: _ 14. ZADANIE DOMOWE: Dokończ powyższe zadanie i dodaj funkcję wypisującą dane osoby o zadanym numerze. Dodaj odpowiednią opcję w menu. 16

8. Pliki Pliki służą do przechowywania danych na dysku, dostęp do plików realizowany jest za pomocą zmiennej wskaźnikowej do typu FILE (w języku C) lub za pomocą strumieni (w języku C++), podobnie do wczytywania i wyprowadzania danych. Obsługę plików można realizować na poziomie tekstu (pliki tekstowe) lub bloków danych (pliki binarne). Przed wykorzystaniem plików należy zawsze plik otworzyć, następuje wówczas powiązanie danego pliku dyskowego (dostępnego poprzez nazwę pliku) ze zmienną plikową. Podczas otwierania pliku decydujemy się na tryb otwarcia pliku (odczyt, zapis, dodawanie danych na końcu pliku lub tryby mieszane) oraz wybór pliku tekstowego lub binarnego. Po otwarciu pliku możemy zapisywać dane do plików, odczytywać dane z pliku, przesuwać głowicę w pliku. Po zakończeniu pracy z plikiem, należy go zamknąć. W języku C, obsługę pliku tekstowego do odczytu można przedstawić następującym przykładem FILE* plik = NULL; // deklaracja zmiennej plikowej plik = fopen( dane.txt, rt ); // otwarcie pliku do odczytu if(plik!=null) { char znak; while(!feof(plik)) { // jeżeli nie ma końca pliku znak = fgetc(plik); // odczytaj jeden znak printf("%c", znak); // wypisz jeden znak } fclose(plik); // zamknij plik } else printf("błądotwarcia pliku\n"); 1. Zmodyfikuj powyższy przykład, tak by wynik był zapisywany do pliku dane2.txt zamiast na ekran. 2. Zmień sposób działania zadania 1 na plik binarny. Zmień funkcje otwierania, odczytu i zapisu danych. W przypadku obsługi strumieniowej plików w C++ wykorzystujemy zmienne typu fstream, ifstream, ofstream. Otwieramy plik deklarując zmienną plikową (obiekt). Przykładowo fstream plik( dane.txt, ios::in ios::out); // otwarcie pliku do odczytu i zapisu Zmienna typu ifstream dotyczy plików do odczytu, ofstream do zapisu. Po otwarciu pliku możemy zapisywać dane tekstowo z wykorzystaniem operatora <<, odczytywać tekstowo za pomocą operatora >>. Przykładowo: plik << x <<, << y <<, << z << endl; // np. 1,2,3 plik >> tekst; // odczyt do białego znaku 17

cout << tekst; // wypisze 1,2,3 getline(plik, tekst); // odczyt całej linii cout << tekst; // wypisze: Ala ma kota Można również wykorzytać getline do odczytu linijki ze standardowego wejścia getline(cin, linijka); Dostęp do strumienia z wykorzystaniem bloków binarnych można uzyskać stosując funkcje read i write Przykładowo char dane[128]; plik.read(dane, 128); 3. Napisz program kopiujący plik o podanej nazwie do drugiego pliku o podanej nazwie, z wykorzystaniem strumieni binarnych 4. Uzupełnij zadanie 14 z poprzedniego działu o zapis danych do pliku na końcu programu oraz odczyt w momencie uruchamiania programu. Użyj czytelnego pliku tekstowego baza.txt składającego się w kolejnych liniach z poszczególnych składowych typu osoba: imię nazwisko płeć wiek Warto zwiększyć rozmiar tablicy przechowującej dane osobowe. 18

9. dodatkowe 1. Napisać funkcję void LosujP(int P[], int n) losującą permutację P rozmiaru n. Permutacja P jest zapisana w tablicy przykładowo dla n = 6, funkcja może wylosować następującą tablicę P = {5, 2, 1, 4, 0, 3}. Wykorzystaj funkcje obsługujące liczby pseudolosowe rand() oraz srand() 2. Napisać funkcję unsigned long long int PermutujBity(int P[], unsigned long long int n) permutującą bity 64 bitowej wartości n zgodnie z wylosowaną wcześniej 64 elementową permutacją P. Przykładowo dla 8 bitowej wartości n można uzyskać następujące przekształcenia n 10011011 (bity numerowane od lewej 76543210) P 24670135 (zapis permutacji oznacza przesuń 7 bit na 2 pozycję, 6 bit na 4, 5 bit na 6,, 1 bit na 3, 0 bit na 5 P(n) 01011110 (bity po przestawieniu pozycji zgodnie z P) 3. Napisać funkcję void Szachownica(int n) rysującą na ekranie szachownicę wymiaru n x n, przykładowo dla n = 6 funkcja powinna wypisać * * * * * * * * * * * * * * * * * * 4. Zmodyfikuj powyższą funkcję do postaci void Szachownica2(int n, int m) podobnie jak poprzednio rysującą szachownicę wymiaru n x n, ale dodatkowo każde pole szachownicy powinno być wymiaru m x m. Przykładowo Szachownica2(4, 2) wyrysuje ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 5. Napisz funkcję int Zaprzyjaznione(int n, int m) sprawdzającą czy dwie liczby n i m są liczbami zaprzyjaźnionymi, tzn. suma dzielników liczby n z wyłączeniem wartości n jest równa m i na odwrót. Funkcja zwraca 1 jeżeli liczby są zaprzyjaźnione, 0 jeżeli nie są zaprzyjaźnione. Przykładowo: 220 = 1 + 2 + 4 + 71 + 142 (suma dzielników wynosi 284) 284 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 (suma dzielników wynosi 220) 6. Napisz program, który znajdzie i wypisze wszystkie możliwe pięciocyfrowe pary liczb zaprzyjaźnionych. 19