Funkcje Typy wyliczeniowe Struktury, unie Scanf / printf Wskaźniki

Podobne dokumenty
Struktury, unie, formatowanie, wskaźniki

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

> C++ typy wyliczeniowe, struktury, unie, konwersje napis <-> liczba, formatowanie wyjścia

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Zajęcia 4 procedury i funkcje

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

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

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

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

C++ wprowadzanie zmiennych

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

2 Przygotował: mgr inż. Maciej Lasota

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

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

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

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

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.

Język C zajęcia nr 11. Funkcje

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

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

Programowanie komputerowe. Zajęcia 4

Podstawy programowania w języku C i C++

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

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

Lab 9 Podstawy Programowania

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Język ludzki kod maszynowy

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

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

Pytania sprawdzające wiedzę z programowania C++

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

dr inż. Paweł Myszkowski Wykład nr 8 ( )

MATERIAŁY DO ZAJĘĆ II

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

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

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

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

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Deklaracja struktury w C++

Część 4 życie programu

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

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

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

XV. Wskaźniki Odczytywanie adresu pamięci istniejących zmiennych Wskaźniki pierwsze spojrzenie.

Języki i metodyka programowania. Wskaźniki i tablice.

DYNAMICZNE PRZYDZIELANIE PAMIECI

Zmienne, stałe i operatory

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

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

( wykł. dr Marek Piasecki )

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

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

#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 ); }

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

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

Podstawy programowania w języku C++

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

1 Powtórzenie wiadomości

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Podstawowe typy zmiennych

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

Podstawy Programowania C++

Algorytmy i język C++

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Informatyka I: Instrukcja 4.2

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

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

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

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

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Programowanie Komputerów

Podstawy programowania w języku C++

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

Struktury Struktura polami struct struct struct struct

Programowanie komputerowe. Zajęcia 1

Informatyka, Ćwiczenie Uruchomienie Microsoft Visual C++ Politechnika Rzeszowska, Wojciech Szydełko. I. ZałoŜenie nowego projektu

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

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

Funkcje i procedury szybkie przypomnienie Tablice i wskaźniki Napisy

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Zajęcia 6 wskaźniki i tablice dynamiczne

STL: Lekcja 1&2. Filozofia STL

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

TEMAT : KLASY DZIEDZICZENIE

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

Wstęp do programowania. Wykład 1

1. Wprowadzanie danych z klawiatury funkcja scanf

Podstawy programowania 2. Temat: Wprowadzenie do wskaźników. Przygotował: mgr inż. Tomasz Michno

Wskaźniki w C. Anna Gogolińska

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

Wstęp do Programowania, laboratorium 02

Laboratorium 1: Podstawy języka c. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Wstęp do programowania

Zajęcia 5 łańcuchy znaków (ciąg dalszy) i funkcje

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Transkrypt:

Funkcje Typy wyliczeniowe Struktury, unie Scanf / printf Wskaźniki

Poniekąd wszystko jest już znane i jasne:

Poniekąd, bo: 1. Można zwrócić kilka wartości na raz (referencja) 2. Parametry mogą być przekazywane przez referencję lub przez wartość 3. Funkcje mogą mieć zmienną liczbę parametrów 4. Mamy do dyspozycji funkcje inline

1. Zaprojektuj funkcję, która odczytuje liczby od użytkownika aż do podania 0. Funkcja ma zwrócić 0 lub 1 w zależności od tego czy tych liczb była parzysta czy nieparzysta ilość. Co więcej funkcja ma jednocześnie zwrócić sumę oraz iloczyn wszystkich podanych liczb. 2. Napisz funkcję, która zwraca wartość n-tego wyrazu ciągu Fibonacciego. Funkcja powinna być napisana w dwóch wersjach: iteracyjnej i rekurencyjnej. unsigned fib(unsigned n); unsigned fibr(unsigned n); 3. Napisz funkcję, która zwraca wartość silni dla podanej liczby n. Funkcja powinna być napisana w wersji iteracyjnej i rekurencyjnej. long silnia(long n); long silniar(long n);

4. Napisz program, który umożliwia szyfrowanie i deszyfrowanie podanego ciągu znaków przy użyciu szyfru Cezara. Szyfrowanie ma realizować funkcja szyfruj, która przyjmuje 2 parametry: pierwszy to łańcuch znaków, natomiast drugi to przesunięcie alfabetu. Zamianie mają podlegać jedynie litery alfabetu angielskiego. Wynikiem funkcji ma być zaszyfrowany tekst. Przykład deklaracji funkcji: string szyfruj(string tekst, unsigned int przesuniecie); string deszyfruj(string tekst, unsigned int przesuniecie)

5. Napisz funkcję strfind, która szuka w tekście (pierwszy parametr) podanej frazy (drugi parametr). Wynikiem funkcji ma być indeks znaku, od którego podana fraza zaczyna się w tekście lub -1, jeżeli tekst nie zawiera szukanej frazy. Wielkość liter w podanych ciągach nie ma znaczenia. Przykład: Dla podanego fragmentu programu: char zdanie[] = "Jutro jest egzamin z programowania."; char fraza[] = "Program"; cout << "Szukam w \"" << zdanie << "\"" << endl; cout << "\t\"" << fraza << "\" : " << strfind(zdanie, fraza) << endl; cout << "\t\"" << fraza << "\" : " << strfind(zdanie, fraza) << endl; cout << "\t\"jutro JEST\" : " << strfind(zdanie, "jutro JEST") << endl; na ekranie powinno zostać wyświetlone: Szukam w "Jutro jest egzamin z programowania." "Program" : 21 jutro JEST" : 0

1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12, na rzecz swoich 143209 poddanych uchwalił dekret o 20 procentowej zniżce podatków. Twoim zadaniem jest wyłuskać wszystkie liczby i wyświetlić ich sumę.

Służą do łatwiejszej kontroli nad stałymi Ustawianie parametrów o ściśle określonym zbiorze wartości i w zasadzie tylko do tego Obostrzenia jak do zmiennych: deklaracja przed użyciem

Takie kontenery, typy złożone z kilku pól różnych typów Żeby z niego skorzystać, trzeba zadeklarować nową zmienną o typie przez nas zdefiniowanym

Takie kontenery, typy złożone z kilku pól różnych typów, ale tylko jedno pole może być na raz ustawione Służą do zmniejszenia zajętości pamięci

1. Napisz program do obsługi książki adresowej. Każdy kontakt to oddzielna struktura (imię, nazwisko, gg). Program ma umożliwiać zapisanie do 100 kontaktów, odczyt całej książki adresowej, szukanie konkretnej osoby po nazwisku. 2. Napisz program wykonujący działania na dwóch liczbach zespolonych podawanych z klawiatury (każda liczba to struktura): dodawanie, odejmowanie, mnożenie. 3. Zadeklaruj zmienną typu enum w której zapiszesz stałe określające z ilu jednostek czasu składa się rok (tj. np. 4 kwartały, 12 miesięcy, 365 dni, x godzin, y minut, z sekund). Następnie sprawdzaj ile dni/godzin/sekund zostało do końca roku.

Jest to funkcja służąca do pięknego wyświetlania na ekran

%[flags][width][.precision][length]specifier Flags: - wyrównanie do lewej (domyślnie do prawej) +poprzedzaj zawsze liczy znakiem + jeśli są dodatnie spacja jeśli liczba jest bez znaku to poprzedzana jest spacją. # wiele znaczeń m.in. poprzedza zapis w systemie szesnastkowym jako 0x. 0 zamiast spacjami puste miejsca wypełniane są zerami. width minimalna liczba znaków do wyświetlenia. Jeśli wartość jest mniejsza niż width to zostanie poprzedzona spacjami. * minimalna szerokość jest podana jako poprzedzająca parametr funkcji printf a nie w jej formacie. precision Minimalna liczba cyfr jakie zostaną wypisane (np. liczba miejsc po przecinku)..* jak w przypadku width (wartość int podawana jako poprzedzająca argument) Length h argument jest traktowany jako [unsigned] short int l argument jest traktowany jako [unsigned] long int L argument jest traktowany jako long double.

Specifier Output Example c Character a d or i Signed decimal integer 392 e Scientific notation (mantissa/exponent) using e character 3.9265e+2 E Scientific notation (mantissa/exponent) using E character 3.9265E+2 f Decimal floating point 392.65 g Use the shorter of %e or %f 392.65 G Use the shorter of %E or %f 392.65 o Unsigned octal 610 s String of characters sample u Unsigned decimal integer 7235 x Unsigned hexadecimal integer 7fa X Unsigned hexadecimal integer (capital letters) 7FA p Pointer address B800:0000 n Nothing printed. The argument must be a pointer to a signed int, where the number of characters written so far is stored. % A % followed by another % character will write % to stdout. %

Taki printf, tylko odwrotnie: czyta wartości do zmiennych Referencja! Scanf() nie nadaje się do stringów!

Przypuśćmy, że chcemy przeczytać datę w formacie: 25 Dec 1988 Wówczas za pomocą scanf napiszemy: int dzien, rok; char miesiac[20]; scanf("%d %s %d", &dzien, miesiac, &rok); W miesiac nie ma referencji bo jest to zmienna tablicowa od razu przekazywana przez referencje!

1. Wyświetl ładnie tabliczkę mnożenia (10x10) na ekran. Ładnie, to znaczy tak, aby poszczególne elementy były wyrównane do prawej i zajmowały tyle samo miejsca (użyj printf, potem spróbuj z cout). Podpowiedź: http://www.cplusplus.com/reference/iostream/ios_base/fmtflags/

Nie taki diabeł straszny Raz jeszcze

Zmienna wskaźnikowa może lokalizować w pamięci RAM: Inne zmienne Nienazwane bloki pamięci Bloki zawierające kod programu np. funkcje Możliwe jest też stworzenie wskaźnika na wskaźnik. Deklaracja wskaźnika wygląda następująco: <typ> *nazwa_zmiennej; Ale uwaga na takie deklaracje: int* x,y; //zmienna x jest wskaźnikiem na typ int //zmienna y jest zwykłą zmienną typu int! int *a,b,*c; //zmienne a i c są wskaźnikami na int

Typ wskaźnikowy Nazwa 1 typ* zwykły wskaźnik 2 const typ* wskaźnik na stałą Dostęp do pamięci odczyt i zapis tylko odczyt Zmiana adresu TAK TAK 3 typ* const stały wskaźnik odczyt i zapis NIE 4 const typ* const stały wskaźnik na stałą tylko odczyt NIE

Typ wskaźnikowy Nazwa 1 typ* zwykły wskaźnik 2 const typ* wskaźnik na stałą Dostęp do pamięci odczyt i zapis tylko odczyt Zmiana adresu TAK TAK 3 typ* const stały wskaźnik odczyt i zapis NIE 4 const typ* const stały wskaźnik na stałą tylko odczyt NIE

Typ wskaźnikowy Nazwa 1 typ* zwykły wskaźnik 2 const typ* wskaźnik na stałą Dostęp do pamięci odczyt i zapis tylko odczyt Zmiana adresu TAK TAK 3 typ* const stały wskaźnik odczyt i zapis NIE 4 const typ* const stały wskaźnik na stałą tylko odczyt NIE

Czy istnieje wskaźnik uniwersalny (na dowolny typ)? Oczywiście że TAK

Deklaracja wskaźnika uniwersalnego jest następująca: void *nazwa; W deklaracji takiego wskaźnika nie podajemy typu na jaki będzie on wskazywał. Pozwala nam to przypisać obiekt każdego typu. Niemożliwe jest wówczas wykorzystanie operatorów wyłuskania * oraz -> bez odwoływania się do rzutowania, bo kompilator nie wie nic o typie wartości przechowywanej pod adresem wskazywanym przez wskaźnik uniwersalny. Programista jest odpowiedzialny za kontrolę typów!

Chociażby do tworzenia uniwersalnych funkcji.

Przy strukturach operator wyłuskania -> działa podobnie jak operator wyłuskania *, natomiast jest po prostu wygodniejszy i szybszy. Po co więc nawiasy w linii 7? Nie lepiej *wsk.dzien = 5? Operator -> pozwala również wywołać metodę w strukturze: int x = wsk->getdzien(); //równoważne (*wsk).getdzien();

Wskaźnik na funkcję różni się od zwykłego wskaźnika budową i faktem, że adres wskaźnika oznacza miejsce w pamięci w którym rozpoczyna się kod funkcji. Wskaźnik taki deklaruje się następująco: <typ> (*nazwa)( <parametry_funkcji> ); Nie ma uniwersalnego wskaźnika na funkcję!

1. Używając dynamicznego przydziału pamięci, stwórz dwuwymiarową tablicę, której rozmiar wierszy będzie zależy od ilości liczb wprowadzonych przez użytkownika. Następnie wyświetl tablicę wylicz sumę liczb w pierwszej kolumnie tablicy. Przykład:

Korzystając z następującej struktury (symbolizującej element stosu): Zaimplementuj podstawowe operacje stosowe: Położenie elementu na wierzchołku stosu void push (elem* &stos, int x) Usunięcie ostatnio odłożonego elementu i zwrócenie go jako wartości funkcji int pop(elem* &stos) Zwrócenie elementu znajdującego się na wierzchołku stosu bez jego usuwania int topel(elem *stos) Sprawdzenie czy stos jest pusty bool isempty(elem *stos)