Funkcje i procedury szybkie przypomnienie Tablice i wskaźniki Napisy

Podobne dokumenty
Prawidłowa konstrukcja (3 x 4) char** tab = new char*[3]; for (size_t i = 0; i < 3; i++) tab[i] = new char[4];

Tablice Napisy Funkcje i procedury Pliki

Tablice Napisy Funkcje i procedury Pliki

*W uproszczeniu: jest dziewięciu sędziów przyznających po dwie noty: za wartość techniczną i artystyczną (skala od 0.0 do 6.0)

Operacje na łańcuchach znaków

Klasy: String, Random, Math. Korzystanie z dokumentacji.

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

Wskaźniki. Informatyka

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

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

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

Lab 9 Podstawy Programowania

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

1 Powtórzenie wiadomości

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

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

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

ŁAŃCUCHY W JĘZYKU C/C++

Zajęcia 4 procedury i funkcje

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

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

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

Struktury, unie, formatowanie, wskaźniki

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

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

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

Programowanie 2 - Tablice i łańcuchy

Języki programowania obiektowego Nieobiektowe elementy języka 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.

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Podstawy programowania w języku C++

lekcja 8a Gry komputerowe MasterMind

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

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

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

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

Podstawy programowania w języku C++

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

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

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

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

Tablice deklaracja, reprezentacja wewnętrzna

Podstawy programowania

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

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

Reprezentacja symboli w komputerze.

Reprezentacja symboli w komputerze. Znaki alfabetu i łańcuchy znakowe. Programowanie Proceduralne 1

Podstawy i języki programowania

Ćwiczenia podstawowe, zestaw 5, część 1

Reprezentacja symboli w komputerze.

Podstawy programowania w języku C++

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

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

Powtórka algorytmów. Wprowadzenie do języka Java.

2 Przygotował: mgr inż. Maciej Lasota

Programowanie komputerowe. Zajęcia 4

Inicjacja tablicy jednowymiarowej

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

1. Typy zmiennych. 2. Typy podstawowe: char short int int long int float

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

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

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

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

Stałe i zmienne znakowe. Stała znakowa: znak

Podstawowe typy zmiennych

C++ wprowadzanie zmiennych

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

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

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

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

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

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

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

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

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

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

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

Programowanie w języku Java

Podstawy programowania 1

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

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

1. Wprowadzanie danych z klawiatury funkcja scanf

Podstawy programowania komputerów

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

I. Podstawy języka C powtórka

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Stałe oznaczane są słowem kluczowym final. Do stałej wartość można przypisać tylko raz. Dobrą konwencją jest nazywanie stałych wielkimi literami

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

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

Programowanie komputerowe. Zajęcia 5

* Funkcje, podprogramy

Transkrypt:

Funkcje i procedury szybkie przypomnienie Tablice i wskaźniki Napisy

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.

Zalety używania dynamicznego przydzielania pamięci: Może ona być dzielona między różnymi obiektami w programie. Jej rozmiar może być ustalany podczas działania programu. int a = 2; STOS STERTA a 2 int* a = new int; STOS STERTA a? *a

Zmienna wskaźnikowa zmienna, która przechowuje adres innego bytu programistycznego (obiektu, zmiennej) w pamięci. Wskaźnik musi mieć podany typ, na jaki wskazuje.

Ad1: deklaracja zmiennej typu całkowitoliczbowego Ad2: deklaracja wskaźnika na int Ad4: przypisanie do wskaźnika adresu zmiennej Ad5: wyłuskanie wartości na którą wskazuje wskaźnik

int** wsk; wsk = new int*; *wsk = new int; STOS STERTA wsk? *wsk? **wsk new int; STOS // Ops I leaked it again STERTA? //MMMAAAAMOOO!! Zgubiłem się! int* liczba = new int; delete liczba; Do każdego new powinno być jedno delete. ZAWSZE.

Lepiej używać malloc() czy new? Są jakieś różnice? Klasa* mojaklasa = (Klasa*)malloc(sizeof(Klasa)); Klasa* mojaklasa2 = new Klasa(); A co jeśli przydział pamięci się nie powiedzie? Wielu programistów polega na tym, że new zawsze spełni swoją funkcję i zwróci oczekiwany rezultat. Domyślnie program się zakończy (niezbyt przyjemnie ale jednak). Istnieje wersja new, która nie używa wyjątków: int* wsk = new(nothrow) int; //zwraca nullptr lub null Niebezpieczne..

Tajny kod do obsługi napisów

Tajny kod do obsługi napisów

Podobne do Javy: typ nazwa[rozmiar] Tego typu tablice tworzone są na stosie. int tablica[] = { [3] = 10, 20, 30, [4] = 50};

int* tab = new int[5]; delete[] tab; STOS STERTA tab????? tab[0] tab[1] tab[2] tab[3] tab[4] Tablice dynamiczne!= Tablice alokowane dynamicznie Nie używać funkcji realloc() z C do stworzenia dynamicznej tablicy.

W C++ można stosować arytmetykę wskaźników (do wskaźnika dodawać i odejmować liczby całkowite). Kompilator sam pomnoży dodawaną liczbę przez rozmiar typu wskaźnika aby dodać do adresu odpowiednią liczbę bajtów.

Odwoływanie się do tablicy jednowymiarowej: int tab[6]; int* wsktab = tab; wsktab[4] = 1; Przekazywanie do funkcji: void Przetwarzaj(int* tablica) { // (int tablica[]) for (int i = 0; i < 5; i++) { tablica[i] = -5; } } int* tab_dyn = new int[2]; tab[0] = 2; tab[1] = 3; int tab_stos[] = {2, 3}; Przetwarzaj(tab_dyn); Przetwarzaj(tab_stos); Przetwarzaj(&tab_stos[0]);

char statki[3][3]; statki[1][1] = X ; STOS STERTA? tab[0][0]? tab[0][1]? tab[0][2]? tab[1][0]? tab[1][1]? tab[1][2]? tab[2][0]? tab[2][1]? tab[2][2]

Czy tak można? const int i = 3, j = 3; char** board = new char[i][j]; STOS STERTA

1. Zadeklaruj tablicę o rozmiarze 100. Wypełnij tablicę zgodnie z regułami Ciągu Fibbonacciego (pierwszy i drugi element = 1, każdy następny to suma dwóch poprzednich: 1,1,2,3,5,8, itd.). 2. Napisz program, który zamienia liczbę dziesiętną podaną przez użytkownika na liczbę binarną i szesnastkową. 3. Napisz program do mnożenia dwóch macierzy o dowolnym rozmiarze. Sprawdzaj, czy mnożenie jest możliwe! 4. Program zgadnij moją liczbę. Program losuje liczbę z zakresu 1 100, a naszym zadaniem jest zgadnąć tą liczbę na podstawie za dużo, za mało. Po zgadnięciu program wyświetla liczbę prób. 5. Wypisz całą tablicę ASCII na ekran (każdy znak w nowej linijce opatrzony numerkiem ) i zapisz ją do tablicy o nazwie tab_ascii w programie.

1. Zrealizować grę w statki na planszy generowanej dynamicznie (do 10 x 10). Raz strzela użytkownik, raz komputer. Dozwolone okręty: 4 x jednomasztowiec Zaprogramować sytuacje: Trafiony zatopiony, Pudło, W plansze id****.

Prawidłowa konstrukcja (3 x 4) char** tab = new char*[3]; for (size_t i = 0; i < 3; i++) tab[i] = new char[4]; STOS STERTA tab for (size_t i = 0; i < 3; i++) delete[] tab[i]; delete[] tab;

Napisy traktowane jako tablice zakończone znakiem o kodzie 0:

Porównywanie: strcmp(str1, str2): zwraca -, + lub 0. Kopiowanie: strcpy(str1, str2) znaczy to samo co intuicyjne: str1 = str2. PRZYPISANIA NIE MOŻNA STOSOWAĆ Konkatenacja: strcat(str1, str2) znaczy to samo co intuicyjne: str1 = str1 + str2. Liczba znaków: strlen(str) Konwersje: atol, strtol - zamienia łańcuch na liczbę całkowitą typu long atoi - zamienia łańcuch na liczbę całkowitą typu int atoll, strtoll - zamienia łańcuch na liczbę całkowitą typu long long (64 bity); atof, strtod - przekształca łańcuch na liczbę typu double http://en.cppreference.com/w/cpp/string/byte

char* kopiujstr(const char* wejscie) { char* wynik = new char[strlen(wejscie)]; strcpy(wynik, wejscie); return wynik; } Poprawna wersja: char* kopiujstr(const char* wejscie) { char* wynik = new char[strlen(wejscie) + 1]; strcpy(wynik, wejscie); return wynik; }

Co będzie wyświetlone? char text1[] = "abcdef"; size_t s1 = sizeof(text1); size_t s2 = strlen(text1); char* text2 = "abcdef"; size_t s3 = sizeof(text2); size_t s4 = strlen(text2);

#include <cctype> #include <clocale> Nazwa funkcji isalnum isalpha islower isupper isdigit isxdigit iscntrl isgraph isspace isblank (C++11) isprint ispunct Nazwa funkcji tolower toupper Opis Sprawdza czy znak jest alfanumeryczny Sprawdza czy znak to poprawna litera Sprawdza czy znak to mała litera Sprawdza czy znak to wielka litera Sprawdza czy znak to liczba Sprawdza czy znak to liczba w systemie szesnastkowym Sprawdza czy znak jest znakiem kontrolnym Sprawdza czy znak ma reprezentację graficzną Sprawdza czy znak jest białym znakiem Sprawdza czy znak jest białym znakiem rozdzielającym słowa Sprawdza czy znak można wyświetlić Sprawdza czy znak jest znakiem przystankowym Opis Zamienia znak na pisany małą literą Zamienia znak na pisany wielką literą

Oraz: strcpy strcat strrev

1. Wykorzystując tablice znaków o długości 20, stwórz program, który zamieni małe litery na wielkie i odwrotnie w napisie podanym przez użytkownika oraz wyświetli napis po zmianach na ekranie.

Jesteśmy uratowani! W C++ jest typ string!

Konwersja na string: string to_string(int val); string to_string(unsigned val); string to_string(long val); string to_string(unsigned long val); string to_string(long long val); string to_string(unsigned long long val); string to_string(float val); string to_string(double val); string to_string(long double val); Konwersja ze stringa na int stoi(const string& str, size_t *idx=0, int base=10); long stol(const string& str, size_t *idx=0, int base=10); unsigned long stoul(const string& str, size_t *idx=0, int base=10); long long stoll(const string& str, size_t *idx=0, int base=10); unsigned long long stoull(const string& str, size_t *idx=0, int base=10); float stof(const string& str, size_t *idx=0); double stod(const string& str, size_t *idx=0); long double stold(const string& str, size_t *idx=0);

Pozostałe metody: str1.compare(str) analogiczne do tego z C str1.c_str(str) zwraca stary łańcuch 0-terminated str1.find(co, [odkad]), rfind (ostatnie wystąpienie), find_first_not_of, find_first_of, str1.replace(start,length,sourceforreplacement) str1.substr(odkad, ile_znakow) zwraca podciąg ciągu str1.swap(str) zamienia zawartości ciągów między sobą http://en.cppreference.com/w/cpp/string/basic_string

1. Czym różni się operator [] od funkcji at? Sprawdź to praktycznie. 2. Zaimplementuj proste szyfry harcerskie: GA-DE-RY-PO-LU-KI, PO-LI-TY-KA-RE-NU, KA-CE-MI-NU-TO-WY. Wyświetla się menu, gdzie użytkownik wybiera szyfr. Następnie komunikat Podaj ciąg wejściowy, który jest odczytywany przez program a następnie zmieniane litery zgodnie ze wzorcem szyfru. 3. Napisz program deszyfrujący podany ciąg (zaszyfrowany prostym szyfrem podstawieniowym: DOXQRIRGB MFBOTPWX LPLYX ALPQXGB MIRPFHX 4. Przeczytaj od użytkownika ciąg tekstu zakończony znakiem kropki (.) Następnie podziel tenże tekst na słowa i wszystkie dłuższe od 4 znaków zapisz do oddzielnej tablicy stringów. Na końcu wypisz na ekran napis złożony z 2 i 3 znaku każdego elementu w tej nowej tablicy. 5. Zadeklaruj dłuższy tekst zawierający słowa zakazane (np. matematyka ) i pozamieniaj wszystkie wystąpienia na coś neutralnego (np. kwiatek ). 6. Napisz funkcję sprawdzającą czy wyraz jest palindromem.

7. Napisz program, który liczy wszystkie samogłoski w podanym ciągu, oraz wyświetlający ich liczbę. Przykład: Ala ma kota a 4 o 1 8. Napisz program, który wczytuje od użytkownika ciąg znaków zakończony wciśnięciem klawisza Enter (dopuszczalne są znaki tylko z alfabetu angielskiego). Program powinien wyświetlić: Liczbę białych znaków w tekście (rozumianych jako spacje i tabulator poziomy) Liczbę liter w tekście Liczbę samogłosek w tekście (tylko z alfabetu angielskiego) Sumę wszystkich cyfr podanych w tekście Przykład: Podaj tekst: Ala ma Białe znaki: 7 Litery: 15 Samogłoski: 8 Suma cyfr: 8 2 koty i 15 rybek.