Algorytmy i język C++



Podobne dokumenty
ZASADY PROGRAMOWANIA KOMPUTERÓW

Deklaracja struktury w C++

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

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

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

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

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

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

Lab 9 Podstawy Programowania

Wskaźniki. Programowanie Proceduralne 1

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

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

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

Programowanie i struktury danych

Programowanie - wykład 4

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie komputerowe. Zajęcia 3

C-struktury wykład. Dorota Pylak

Zajęcia 6 wskaźniki i tablice dynamiczne

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki

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

Wskaźniki. Informatyka

Zmienne i struktury dynamiczne

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

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

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

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

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

Zajęcia 4 procedury i funkcje

Programowanie strukturalne i obiektowe. Funkcje

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

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wstęp do programowania

Podstawy Programowania Obiektowego

void Pobierz(Student &a); void Wypisz(Student a); void Ustaw_zaliczenia(Student t[],int r); void Wypisz_najlepszych(Student t[],int r, float prog);

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Język C++ zajęcia nr 2

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

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:

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

C-struktury wykład. Dorota Pylak

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

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

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Rekurencja (rekursja)

Pytania sprawdzające wiedzę z programowania C++

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

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

Techniki Programowania wskaźniki

Programowanie komputerowe. Zajęcia 4

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

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie komputerowe. Zajęcia 7

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

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

7. Pętle for. Przykłady

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Struktury, unie, formatowanie, wskaźniki

Wskaźniki w C. Anna Gogolińska

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

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

3. Instrukcje warunkowe

TEMAT : KLASY DZIEDZICZENIE

Wykład 1: Wskaźniki i zmienne dynamiczne

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

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

Wstęp do programowania

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Wstęp do Programowania 2

Program 22. #include <iostream> using namespace std; struct Osoba { string Imie; string Nazwisko; char Plec; int RokUr; };

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Podstawy Programowania

Część 4 życie programu

Programowanie komputerowe. Zajęcia 2

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH

4. Funkcje. Przykłady

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

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

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

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

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

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.

Algorytmy i język C++ Tomasz Bielaczyc

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

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

Transkrypt:

Wykład 6

Wskaźniki Wskaźnik nie przechowuje wartości zmiennej ale, podobnie jak tablica, wskazuje miejsce w pamięci, w którym znajduje się zmienna danego typu. W poniższym przykładzie symbol * pomiędzy int, a wskaz oznacza, że wskaz jest wskaźnikiem do zmiennej typu int (a nie zmienną typu int). int *wsk; //deklaracja wskaźnika wsk=new int; //przydzielenie zmiennej miejsce w pamięci *wsk=5; //zapisanie liczby 5 w tym miejscu pamięci cout << *wsk << endl; delete wsk; //zwolnienie pamięci wskazywanej przez wskaźnik Polecenie delete zwalnia miejsce w pamięci - nie będzie ona zatem zajmowana przez cały czas wykonywania programu, co ma miejsce przy normalnym deklarowaniu zmiennych.

Wskaźniki - tablice Zmienna tablicowa jest wskaźnikiem do obszarów pamięci. int* T; int n; cin >> n; T = new int[n]; for (int i=0; i<n; i++) cin>>t[i]; for (i=0; i<n; i++) cout << T[i] << ", "; delete [] T;

Adresy Operator & adresu występuje przy deklaracji zmiennej zwanej referencją. Poniżej zmienna alias podszywa się pod zmienną x typu int. int x = 15; int & alias = x; Zamiast operatora * wyłuskania (dereferencji) w poniższym przypadku int x = 35; int * wsk = & x; *wsk = 45; wygodniej użyć operatora referencji int x = 35; int& alias = x; alias = 45;

Wskaźniki, funkcje Funkcję skracając ułamek (zwracającą dwie wartości: licznika i mianownika) możemy napisać używając wskaźników. void skrac1(int *a, int *b){ int d=nwd(*a,*b); *a=*a/d; *b=*b/d; } Wywołamy ją poleceniem skrac1(&licz, &mian), a wynik wypiszemy poleceniem cout << licz << "/" << mian << endl; Zauważmy, że funkcja sortowania szybkiego nie zawiera polecenia zwrócenia wartości return, a jednak zmienia wartości w tablicy. Wynika to stąd, że nazwa tablicy jest wskaźnikiem stałym, a nie nazwą zmiennej.

Referencje, funkcje Do skracania ułamków możemy użyć także referencji void skrac2(int &a, int &b){ int d=nwd(a,b); a=a/d; b=b/d; } W tym przypadku funkcję wywołujemy poleceniem skrac2(licz, mian).

Struktury Poleceniem struct możemy stworzyć strukturę złożoną ze zmiennych. Stwórzmy strukturę o nazwie autor. struct autor{ string imie, nazwisko, tytul; int rok; }; //deklarujemy zmienne //czyli pola struktury

Struktury Możemy teraz zadeklarować zmienne typu autor oraz nadać im cechy. autor os1, os2; os1.imie = "Thomas"; os1.nazwisko = "Cormen"; os1.tytul = "Wprowadzenie do algorytmow"; os1.rok = 1997; cin >> os2.imie >> os2.nazwisko >> os2.tytul >> os2.rok; Zmiennym os1, os2 odpowiadają dane wpisanych osób. Możemy wybrane z nich wypisać pisząc cout << "Pierwszy autor nosi nazwisko " << os1.nazwisko << endl; cout << "Drugi autor nosi imię " << os2.imie << endl;

Klasy, metody Tworząc strukturę możemy dodać do niej funkcje - taką strukturę nazywamy klasą. struct autor{ string imie, nazwisko, tytul; //deklarujemy zmienne int rok; //czyli pola klasy void napisz(); //określamy funkcję }; //czyli metodę klasy void autor::napisz(){ cout << "Autorem " << tytul << " jest " << nazwisko << endl; } Teraz po zdefiniowaniu zmiennych os1 i os2 możemy wypisać dane, np. os1.napisz();

Struktury, funkcje Jeśli stworzymy strukturę z dwoma polami struct para {int licznik; int mianownik;}; to będziemy mogli za jej pomocą napisać funkcję skracającą ułamki. para skrac3(int a, int b){ int d=nwd(a,b); para p; //deklaracja zmiennej p typu para p.licznik = a/d; p.mianownik = b/d; return p; } Jest to funkcja typu para. Aby skrócić ułamek x y napiszemy para p = skrac3(x, y); cout << p.licznik << / << p.mianownik << endl;

Rozszerzony algorytm Euklidesa Za pomocą rozszerzonego algorytmu Euklidesa możemy dla danych liczb całkowitych a, b znaleźć współczynniki całkowite x, y tak, aby NWD(a,b) = ax + by. W szczególności jeśli a i b są względnie pierwsze otrzymujemy ax + by = 1. (Oznacza to, że jeśli NWD(a,n) = 1, to ax = 1(modn), czyli x jest multiplikatywną odwrotnością a modulo n.)

Rozszerzony algorytm Euklidesa Algorytm zapisany w pseudokodzie wygląda następująco ext_eukl(a,b) 1 if b=0 2 then return (a,1,0) 3 else 4 (d,x,y ) <- ext_eukl(b,a mod b) 5 (d,x,y) <- (d,y,x -[a/b]y ) 6 return (d,x,y) Zauważmy, że bx + a(mod b)y = bx + ay b[a/b]y = ay + b(x [a/b]y ) = ax + by, czyli algorytm daje prawidłowy wynik.

Rozszerzony algorytm Euklidesa Aby zaimplementować go w języku C++ stworzymy strukturę złożoną z trzech liczb całkowitych struct Trojka{ int d; int x; int y; }; a następnie napiszemy funkcję rekurencyjną

Rozszerzony algorytm Euklidesa Trojka ext_eukl(int a, int b){ Trojka t; if(b==0){ t.d = a; t.x = 1; t.y = 0; } else{ t=ext_eukl(b, a%b); int tymczas=t.x; t.x = t.y; t.y = tymczas-(a/b)*t.y; } return t; }

Przykładowe zadania Po wczytaniu liczb a,b możemy wywołać funkcję i wypisać wynik na ekran Trojka rozw = ext_eukl(a, b); cout <<"x="<<rozw.x<<", y="<<rozw.y<<", d="<<rozw.d<<endl; Zadanie Napisz funkcję sumującą dowolne dwa ułamki. Zadanie Napisz program, który dla wczytanych liczb całkowitych a, n znajduje multiplikatywną odwrotność a modulo n o ile ta istnieje.