#include <iostream.h> #include <conio.h>

Podobne dokumenty
struct Student { char nazwisko[30]; int wiek; float ocena; }; #define MAX_ROZMIAR 3 Student lista_studentow[max_rozmiar];

int tab_a [ 2 ] [ 3 ];

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Szablony. Szablony funkcji

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

tablica: dane_liczbowe

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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

Co nie powinno być umieszczane w plikach nagłówkowych:

Język C zajęcia nr 11. Funkcje

Wstęp do programowania 1

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

Szablony funkcji i szablony klas

Język C, tablice i funkcje (laboratorium, EE1-DI)

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

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

Pola i metody statyczne

PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h>

Szablony klas, zastosowanie szablonów w programach

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

Szablony funkcji i klas (templates)

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

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Stos liczb całkowitych

Projektowanie klas c.d. Projektowanie klas przykład

Podstawy programowania w języku C++

Język C, tablice i funkcje (laboratorium)

TEMAT : KLASY POLIMORFIZM

Funkcje zawarte w bibliotece < io.h >

Przeciążanie funkcji. Przykład 1: #include <iostream> using namespace std; double srednia(double n1, double n2) { return ((n1 + n2)/2.

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

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

1. Abstrakcyjne typy danych

Programowanie w języku C++

Programowanie obiektowe 2005/2006. Laboratorium 1. Przeciążanie funkcji

Funkcje zawarte w bibliotece < io.h >

Zmienne i struktury dynamiczne

Paradygmaty programowania. Paradygmaty programowania

Algorytmy i Struktury Danych. Anna Paszyńska

Wprowadzenie do szablonów szablony funkcji

Wyklad 7 Funkcje (c.d.). Tablice jednowymiarowe znaków

Wprowadzenie do szablonów szablony funkcji

Abstrakcyjne struktury danych w praktyce

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

Podstawy Programowania Obiektowego

Języki i metody programowania Java INF302W Wykład 2 (część 1)

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

Operacje wejścia/wyjścia odsłona pierwsza

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

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

Podstawy programowania w języku C++

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

Szablon klasy std::vector

Wprowadzenie do szablonów klas

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

IX. Wskaźniki.(3 godz.)

C-struktury wykład. Dorota Pylak

Zmienne, stałe i operatory

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

Techniki Programowania wskaźniki

Proste programy w C++ zadania

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

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

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

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

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Java Podstawy. Michał Bereta

Wykład :37 PP2_W9

Programowanie i struktury danych

DYNAMICZNE PRZYDZIELANIE PAMIECI

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Algorytmy i język C++

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Język C++ wykład VIII

Klasa, metody, rozwijanie w linii

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

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

Język ludzki kod maszynowy

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Wartości domyślne, szablony funkcji i klas

TEMAT : KLASY DZIEDZICZENIE

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

Wstęp do programowania

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

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

2 Przygotował: mgr inż. Maciej Lasota

Funkcja (podprogram) void

Przeciążanie operatorów

Podstawy programowania obiektowego

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Definiowanie własnych klas

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

Techniki Programowania wskaźniki 2

Wskaźniki w C. Anna Gogolińska

Klasa, metody, rozwijanie w linii

Abstrakcyjny typ danych

Programowanie obiektowe i zdarzeniowe

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

Transkrypt:

[p_00.cpp] // Przykladowy program ilustrujacy operacje na zwyklej tablicy liczb "float". // Operacja zapisania wczytanej "wartosci" do tablicy // oraz operacja wyswietlenia wskazanego elementu. // Bez kontrolowania poprawnosci indeksu! float TAB[50]; TAB[pozycja] = x; x = TAB[pozycja]; Przyklady do 1 wykladu - strona 1

[p_01.cpp] // Program realizujacy te same operacje co przyklad [ p_00.cpp] // ale z zastosowaniem abstrakcyjnego interfejsu do tablicy // za pomoca funkcji // NIEFORMALNY OPIS FUNKCJI OPERUJACYCH NA TABLICY // // WstawElement - funkcja umieszczajaca zadana <wartosc> // w liscie na zadanej <pozycji> // Podczas wykonywania tej operacji // powinna byc kontrolowana poprawnosc (zakres) // wskazanej pozycji i sygnalizowana poprzez kod_bledu. // // PodajElement - funkcja zwracajaca <wartosc> odczytana // z zadanej <pozycji> w liscie. // Podczas wykonywania tej operacji // powinna byc kontrolowana poprawnosc (zakres) // wskazanej pozycji //FORMALNY INTERFEJS FUNKCJI void WstawElement(float tablica[], int rozmiar, int pozycja, float wartosc, int& kod_bledu); float PodajElement(float tablica[], int int pozycja, int& kod_bledu); float TAB[50]; int kod_bledu; WstawElement( TAB, 50, pozycja, x, kod_bledu); Przyklady do 1 wykladu - strona 2 rozmiar, if( kod_bledu!=0 ) cout<<"\nwystapil blad zakresu podczas zapisu do tablicy\n"; x = PodajElement( TAB, 50, pozycja, kod_bledu); if( kod_bledu!=0 ) cout<<"\nwystapil blad zakresu podczas odczytu z tablicy\n";

//PRZYKLADOWA IMPLEMENTACJA FUNKCJI WstawElement i PodajElement void WstawElement(float tablica[], int rozmiar, int pozycja, float wartosc, int& kod_bledu) if( pozycja<0 pozycja>=rozmiar ) kod_bledu = 1; tablica[pozycja] = wartosc; kod_bledu = 0; float PodajElement(float tablica[], int rozmiar, int pozycja, int& kod_bledu) if( pozycja<0 pozycja>=rozmiar ) kod_bledu = 1; return 0; kod_bledu = 0; return tablica[pozycja]; Przyklady do 1 wykladu - strona 3

[p_02.cpp] // Operacja normalizacji zadanego indeksu // poprzez wskazanie najblizszego elementu o poprawnym indeksie //-------------------------- OPIS FUNKCJI ------------------------- // Podczas wykonywania operacji na tablicy // zadana pozycja elementu powinna byc normalizowana // poprzez wskazanie najblizszego "poprawnego" indeksu // WstawElement - funkcja umieszczajaca zadana <wartosc> // na zadanej <pozycji> w liscie // PodajElement - funkcja zwracajaca przez liste parametrów <wartosc> // odczytana z zadanej <pozycji> w liscie //-------------------------- INTERFEJS FUNKCJI --------------------- void WstawElement(float tablica[], int rozmiar, int pozycja, float wartosc); float PodajElement(float tablica[], int rozmiar, int pozycja); //-------------------------- PRZYKLADOWY PROGRAM ------------------------- float TAB[50]; WstawElement( TAB, 50, pozycja, x); x = PodajElement( TAB, 50, pozycja); //----- PIERWSZA WERSJA IMPLEMENTACJI OPERACJI WSTAWIANIA / POBIERANIA ------ void WstawElement(float tablica[], int rozmiar, int pozycja, float wartosc) if( pozycja<0 ) pozycja = 0; if( pozycja>=rozmiar ) pozycja = rozmiar-1; tablica[pozycja] = wartosc; float PodajElement(float tablica[], int rozmiar, int pozycja) if( pozycja<0 ) pozycja = 0; if( pozycja>=rozmiar ) pozycja = rozmiar-1; return tablica[pozycja]; Przyklady do 1 wykladu - strona 4

[p_03.cpp] // Operacja cyklicznej normalizacji zadanego indeksu // poprzez wyznaczenie wartosci "modulo" //-------------------------- OPIS FUNKCJI ------------------------- // Podczas wykonywania operacji na tablicy // zadana pozycja elementu powinna byc normalizowana // poprzez wyznaczenie wartosci "modulo" // // WstawElement - funkcja umieszczajaca zadana <wartosc> // na zadanej <pozycji> w liscie // PodajElement - funkcja zwracajaca przez liste parametrów <wartosc> // odczytana z zadanej <pozycji> w liscie //-------------------------- INTERFEJS FUNKCJI --------------------- void WstawElement(float tablica[], int rozmiar, int pozycja, float wartosc); float PodajElement(float tablica[], int rozmiar, int pozycja); //-------------------------- PRZYKLADOWY PROGRAM ------------------------- float TAB[50]; WstawElement( TAB, 50, pozycja, x); x = PodajElement( TAB, 50, pozycja); //----- DRUGA WERSJA IMPLEMENTACJI OPERACJI WSTAWIANIA / POBIERANIA -------- void WstawElement(float tablica[], int rozmiar, int pozycja, float wartosc) pozycja %= rozmiar; tablica[pozycja] = wartosc; float PodajElement(float tablica[], int rozmiar, int pozycja) pozycja %= rozmiar; return tablica[pozycja]; Przyklady do 1 wykladu - strona 5

[p_04.cpp] // Reprezentacja abstrakcyjnej tablicy // z cyklicznym przesunieciem elementów w tablicy rzeczywistej // (i z normalizacja poprzez "modulo") //-------------------------- OPIS FUNKCJI ------------------------- // Podczas wykonywania operacji na tablicy // zadana pozycja elementu powinna byc normalizowana // poprzez wyznaczenie wartosci "modulo" // // WstawElement - funkcja umieszczajaca zadana <wartosc> // na zadanej <pozycji> w liscie // PodajElement - funkcja zwracajaca przez liste parametrów <wartosc> // odczytana z zadanej <pozycji> w liscie //-------------------------- INTERFEJS FUNKCJI --------------------- void WstawElement(float tablica[], int rozmiar, int pozycja, float wartosc); float PodajElement(float tablica[], int rozmiar, int pozycja); //-------------------------- PRZYKLADOWY PROGRAM ------------------------- float TAB[50]; WstawElement( TAB, 50, pozycja, x); x = PodajElement( TAB, 50, pozycja); //----- TRZECIA WERSJA IMPLEMENTACJI OPERACJI WSTAWIANIA / POBIERANIA ------ #define PRZESUNIECIE 7 void WstawElement(float tablica[], int rozmiar, int pozycja, float wartosc) pozycja = (pozycja+przesuniecie)%rozmiar; tablica[pozycja] = wartosc; float PodajElement(float tablica[], int rozmiar, int pozycja) pozycja = (pozycja+przesuniecie)%rozmiar; return tablica[pozycja]; Przyklady do 1 wykladu - strona 6

[p_05.cpp] // "obiektowa" implementacja przykladów p_02 / p_03 / p_04 // z wykorzystaniem przeciazonego operatora indeksu //------------------ DEFINICJA TYPU DANYCH struct T_tablica #define ROZMIAR 50 float tab[rozmiar]; float& operator[](int pozycja); ; //----------------- PRZYKLADOWY PROGRAM (5) -------------------------------- T_tablica TAB; TAB[pozycja] = x; // TAB.operator[](pozycja) = x; x = TAB[pozycja]; // x = TAB.operator[](pozycja); //-------RÓZNE IMPLEMENTACJE OPERACJI (operatora) INDEKSU ----------------- //operacja indeksu analogiczna do przykladu (p_02) float& T_tablica::operator[](int pozycja) if( pozycja<0 ) pozycja = 0; if( pozycja>= ROZMIAR ) pozycja = ROZMIAR-1; return tab[ pozycja ]; //operacja indeksu analogiczna do przykladu (p_03) float& T_tablica::operator[](int pozycja) pozycja %= ROZMIAR; return tab[ pozycja ]; //operacja indeksu analogiczna do przykladu (p_04) float& T_tablica::operator[](int pozycja) int rzeczywista_pozycja = (POCZATEK+pozycja)%ROZMIAR; return tab[rzeczywista_pozycja]; Przyklady do 1 wykladu - strona 7

[p_06.cpp] // przykladowa "obiektowa" implementacja tablicy z kontrolowaniem zakresu indeksów // i wewnetrzna zmienna stanu informujaca o wystepujacych bledach zakresu //------------------ DEFINICJA TYPU DANYCH struct T_tablica #define ROZMIAR 50 float tab[50]; int blad_zakresu; T_tablica() blad_zakresu=0; float& operator[](int pozycja); void ZerujStan() blad_zakresu=0; ; //----------- IMPLEMENTACJA OPERACJI (operatora) INDEKSU ------------------- float& T_tablica::operator[](int pozycja) if( blad_zakresu pozycja<0 pozycja>=rozmiar ) blad_zakresu=1; return tab[0]; return tab[pozycja]; //----------------- PRZYKLADOWY PROGRAM (5) -------------------------------- T_tablica TAB; TAB[pozycja] = x; if( TAB.blad_zakresu ) cout<<"\nwystapil blad zakresu podczas zapisu do tablicy\n"; TAB.ZerujStan(); x = TAB[pozycja]; if( TAB.blad_zakresu ) cout<<"\nwystapil blad zakresu podczas zapisu do tablicy\n"; Przyklady do 1 wykladu - strona 8

[p_07.cpp] - tworzenie abstrakcyjnych reprezentacji danych za pomoca wzorców // przykladowe funkcje "Maksimum" dla typu "int" oraz "float" int Maksimum( int a, int b ) if( a>b ) return a; return b; float Maksimum( float a, float b ) if( a>b ) return a; return b; // definicja abstrakcyjnego wzorca-szablonu funkcji "Maksimum" template <class TTT> TTT Maksimum( TTT a, TTT b ) if( a>b ) return a; return b; //----------------- PRZYKLADOWY PROGRAM (7) -------------------------------- int x_i=5,w_i; w_i = Maksimum( x_i, 10 ); //wywolanie funkcji: int Maksimum( int, int ); float x_f=5, w_f; w_f = Maksimum( x_f, 10.0 ); //wywolanie funkcji: float Maksimum( float, float ); double x_d=5,w_d; w_d = Maksimum( x_d, 10 ); //funkcja: double Maksimum(double,double); //wygenerowana na podstawie wzorca unsigned long int x_uli=5, w_uli; w_uli = Maksimum( x_uli, 10 ); // funkcja: unsigned long Maksimum(unsigned long, unsigned long); // równiez wygenerowana na podstawie tego samego wzorca Przyklady do 1 wykladu - strona 9

[p_08.cpp] // abstrakcyjna implementacja tablicy z przykladu [ p_05 ] za pomoca szablonu klasy //------ DEFINICJA NOWEGO TYPU ZA POMOCA WZORCA-SZABLONU KLASY ------- template <class ELEMENT> struct T_tablica #define ROZMIAR 50 ELEMENT tab[rozmiar]; ELEMENT& operator[](int pozycja); ; //---------SZABLON IMPLEMENTACJI OPERACJI (operatora) INDEKSU -------- template <class ELEMENT> ELEMENT& T_tablica<ELEMENT>::operator[](int pozycja) if( pozycja<0 ) pozycja = 0; if( pozycja>= ROZMIAR ) pozycja = ROZMIAR-1; return tab[ pozycja ]; //----------------- PRZYKLADOWY PROGRAM (5) --------------------------- T_tablica<double> TAB_1; //utworzenie tablicy elementów "double" T_tablica<long> TAB_2; //utworzenie tablicy elementów "long" // wpisywanie danych do tablic TAB_1[ 0 ] = 10.0; TAB_2[ -7 ] = 10; //wyswietlanie zawartosci elementów tablic cout << "\nwartosc double z pierwszej tablicy: " << TAB_1[0]; cout << "\nwartosc long z drugiej tablicy: " << TAB_2[-7]; Przyklady do 1 wykladu - strona 10