int tab_a [ 2 ] [ 3 ];

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

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

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

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

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

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

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

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

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

tablica: dane_liczbowe

Zmienne i struktury dynamiczne

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

1. Abstrakcyjne typy danych

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

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

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

Dynamiczne struktury danych

Deklaracja struktury w C++

Stałe, tablice dynamiczne i wielowymiarowe

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

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

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

Programowanie i struktury danych

Wykłady opracowane zostały w oparciu o materiały prof. dr hab. Jerzego Weresa. Poznań 2009/2010 Algorytmy i struktury danych Krzysztof Nowakowski 2

Programowanie strukturalne i obiektowe

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

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

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

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

Wstęp do Informatyki

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

Wykład :37 PP2_W9

( wykł. dr Marek Piasecki )

Proste programy w C++ zadania

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

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

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

INSTRUKCJE REPETYCYJNE PĘTLE

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

Programowanie w języku C++

INSTRUKCJE REPETYCYJNE PĘTLE

Część 4 życie programu

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

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

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

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Wprowadzenie do języka Java

Uzupełnienie dot. przekazywania argumentów

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

Wstęp do programowania

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

Wstęp do programowania 1

Wskaźniki. Informatyka

Tablice, funkcje - wprowadzenie

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

Jak napisać listę jednokierunkową?

Programowanie obiektowe W3

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

ALGORYTMY I STRUKTURY DANYCH

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Programowanie w językach

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Wskaźniki. Programowanie Proceduralne 1

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

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

Programowanie w języku C++

Alokacja pamięci dla tablicy dwuwymiarowej

Inicjacja tablicy jednowymiarowej

Wstęp do Programowania 2

Struktury czyli rekordy w C/C++

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

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

Podstawy programowania C. dr. Krystyna Łapin

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

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

Wstęp do wskaźników i dynamicznej alokacji pamięci w językach ANSI C i C++

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

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

Wykład 6. Operacje na łańcuchach znakowych

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

Lab 9 Podstawy Programowania

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

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

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

Język ANSI C tablice wielowymiarowe

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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

Zajęcia 6 wskaźniki i tablice dynamiczne

Algorytmy i język C++

Języki programowania - podstawy

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

Podstawy programowania w języku C++

C-struktury wykład. Dorota Pylak

Jak Windows zarządza pamięcią?

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

Programowanie i struktury danych

Transkrypt:

// PROGRAM 4_1 - Przyklady dynamicznego tworzenia // i usuwania tablicy dwuwymiarowej int [2][3] #include <alloc.h> void main(void) //------------------------------ Przyklad A ------------------------------------------- //zwykla tablica dwuwymiarowa (dla porównania) int tab_a [ 2 ] [ 3 ]; // przykladowe operacje tab_a[0][0] = 200; tab_a[0][1] = 201; tab_a[1][0] = 210; tab_a[1][1] = tab_a[1][1]; // nie trzeba oprogramowywac operacji usuwania tablicy A // bo jej tworzenie i usuwanie jest zrealizowane przez kompilator! //------------------------------- Przyklad B ------------------------------------------- // wskaznik na dwuwymiarowa dynamiczna tablice liczb calkowitych // Uwaga: taka reprezentacja jest bardzo niewygodna do zapisywania // bo wszedzie trzeba dopisywac operator gwiazdki lub [0] int (*tab_b) [ 2 ] [ 3 ]; tab_b = ( int(*)[2][3] )malloc( 2*3*sizeof(int) ); // ## tab_b = new int[1][2][3]; << to samo, za pomoca operatora new // przykladowe operacje na takiej tablicy B (*tab_b)[0][0] = 200; // tab_b[0][0][0] = 200; (*tab_b)[0][1] = 201; // tab_b[0][0][1] = 201; (*tab_b)[1][0] = 210; // tab_b[0][1][0] = 210; (*tab_b)[1][1] = (*tab_b)[1][1]; // zwolnienie obszaru zajmowanego przez tablice B free( tab_b ); // ## delete tab_b; << to samo, za pomoca operatora delete - 1

//--------------------------------- Przyklad C ----------------------------------------- //wskaznik na pierwsza 3-elementowa tablice (pierwsza z dwóch) int (*tab_c) [ 3 ]; tab_c = ( int(*)[3] )malloc( 2*3*sizeof(int) ); // ## tab_c = new int [2][3]; // przykladowe operacje na tablicy C tab_c[0][0] = 200; tab_c[0][1] = 201; tab_c[1][0] = 210; tab_c[1][1] = tab_c[1][1]; // zwolnienie obszaru zajmowanego przez tablice C free( tab_c ); // ## delete tab_c; //---------------------------------- Przyklad D ------------------------------------------- //zwykla dwuelementowa tablica wskazników na dynamiczne tablice liczb int *tab_d [ 2 ]; tab_d[0] = (int*)malloc( 3*sizeof(int) ); // pierwszy wiersz tab_d[1] = (int*)malloc( 3*sizeof(int) ); // drugi wiersz // ## tab_d[0] = new int [3]; // pierwszy wiersz // ## tab_d[1] = new int [3]; // drugi wiersz // przykladowe operacje na tablicy D tab_d[0][0] = 200; tab_d[0][1] = 201; tab_d[1][0] = 210; tab_d[1][1] = tab_d[1][1]; // zwolnienie obszaru zajmowanego przez tablice D free( tab_d[0] ); free( tab_d[1] ); // ## delete tab_d[0]; // ## delete tab_d[1]; - 2

//----------------------------------- Przyklad E ------------------------------------------- // dynamiczna dwuelementowa tablica wskazników na dynamiczne tablice // 3 liczb calkowitych int **tab_e; // Dwuetapowe tworzenie tablicy -> najpierw tablica z adresami wierszy tab_e = (int**)malloc( 2*sizeof(int*) ); // tablica dwóch wskazników // potem dwie tablice zawierajace wiersze tab_e[0] = (int*)malloc( 3*sizeof(int) ); // pierwszy wiersz tab_e[1] = (int*)malloc( 3*sizeof(int) ); // drugi wiersz // ## tab_e = new int* [2]; // tablica dwóch wskazników // ## tab_e[0] = new int [3]; // pierwszy wiersz // ## tab_e[1] = new int [3]; // drugi wiersz // przykladowe operacje na tablicy E tab_e[0][0] = 200; tab_e[0][1] = 201; tab_e[1][0] = 210; tab_e[1][1] = tab_e[1][1]; // zwolnienie obszaru zajmowanego przez tablice E free( tab_e[0] ); // zwolnienie pierwszego wiersza free( tab_e[1] ); // zwolnienie drugiego wiersza free( tab_e ); // dopiero na koniec, zwolnienie tablicy wskazników // ## delete tab_e[0]; // ## delete tab_e[1]; // ## delete tab_e ; // main program 4_1-3

// PROGRAM 4_2 // Przyklad oprogramowania dynamicznej listy jednokierunkowej // ( najprostsza wersja bez wyróznienia funkcji interfejsu ) #include <iostream.h> #include <conio.h> // getch() #include <ctype.h> // toupper() struct TDane char tekst[30]; int liczba; char znak; //... inne dane ; struct TElementListy TDane dane; TElementListy* nastepny; ; void main() TElementListy* pierwszy=null; //-------- FAZA WCZYTYWANIA DANYCH I TWORZENIA LISTY ------------- int klawisz; while(1) cout<<"\n\nczy chcesz dodac nowy element do listy (t/n) : "; klawisz = toupper( getch() ); if( klawisz=='n' ) break; // wczytywanie danych kolejnego elementu TDane nowe_dane; cout<<"\n\nwprowadznie danych nowego elementu:\n"; cout<<"podaj tekst: "; cin>>nowe_dane.tekst; cout<<"podaj liczbe: "; cin>>nowe_dane.liczba; cout<<"podaj znak: "; cin>>nowe_dane.znak; // przydzielenie pamieci na nowy element listy TElementListy* nowy_element; nowy_element = new TElementListy; - 4

if( nowy_element==null ) cout<<"\n\nblad przydzialu pamieci. Koniec wprowadzania.\n"; break; // skopiowanie danych i dolaczenie nowego elementu do listy nowy_element->dane = nowe_dane; nowy_element->nastepny = pierwszy; pierwszy = nowy_element; //---------- FAZA WYSWIETLANIA ZAWARTOSCI LISTY --------------- if( pierwszy==null ) cout<<"\nlista jest pusta\n"; else cout<<"\nlista zawiera nastepujace elementy:"; TElementListy* aktualny; int licznik=0; for( aktualny=pierwszy; aktualny!=null; aktualny=aktualny->nastepny ) cout<<"\n\nelement numer: "<< ++licznik; cout<<"\n tekst: "<< aktualny->dane.tekst; cout<<"\n liczba: "<< aktualny->dane.liczba; cout<<"\n znak: "<< aktualny->dane.znak; cout<<"\nnacisnij dowolny klawisz\n"; getch(); //---------- FAZA USUWANIA LISTY - ZWALNIANIA PAMIECI --------------- TElementListy* aktualny; TElementListy* do_usuniecia; aktualny=pierwszy; while( aktualny ) do_usuniecia = aktualny; aktualny = aktualny->nastepny; delete do_usuniecia; cout<<"\nlista zostala usunieta."; cout<<"\nnacisnij dowolny klawisz aby zakonczyc"; getch(); - 5

// PROGRAM 4_3 // Przyklad oprogramowania dynamicznej listy jednokierunkowej // ( druga wersja - z wyróznieniem funkcji operujacych na // strukturze TDane oraz na liscie ) #include <iostream.h> #include <conio.h> // getch() #include <ctype.h> // toupper() // Nowy typ "TBoolean" modelujacy wartosci logiczne: prawda / falsz typedef char TBoolean; #define True 0xFF #define False 0x00 // Struktura TDane i funkcje Wczytaj(), Wyswietl() // modelujace dane przechowywane w elementach listy struct TDane char tekst[30]; int liczba; char znak; ; void Wczytaj(TDane &dane) cout<<"\n\nwprowadznie danych nowego elementu:\n"; cout<<"podaj tekst: "; cin>>dane.tekst; cout<<"podaj liczbe: "; cin>>dane.liczba; cout<<"podaj znak: "; cin>>dane.znak; void Wyswietl(const TDane &dane) cout<<"\n tekst: " << dane.tekst; cout<<"\n liczba: " << dane.liczba; cout<<"\n znak: " << dane.znak; - 6

// Struktura TElementListy // i funkcje Dopisz(), Usun() modelujace operacje na "elementach" listy struct TElementListy TDane dane; TElementListy* nastepny; ; TBoolean Dopisz(TElementListy* &pierwszy, const TDane& dane) TElementListy* nowy_element; nowy_element = new TElementListy; if( nowy_element==null ) return False; //blad przydzialu pamieci // skopiowanie danych i dolaczenie nowego elementu do listy nowy_element->dane = dane; nowy_element->nastepny = pierwszy; pierwszy = nowy_element; return True; TBoolean UsunElement(TElementListy* &pierwszy) if(!pierwszy ) return False; else TElementListy* do_usuniecia; do_usuniecia = pierwszy; pierwszy = pierwszy->nastepny; delete do_usuniecia; return True; - 7

void main() //-------------------- Program glowny ------------------------ TElementListy* pierwszy=null; // -------- FAZA WCZYTYWANIA DANYCH I TWORZENIA LISTY ------------- int klawisz; while(1) cout<<"\n\nczy chcesz dodac nowy element do listy (t/n) : "; klawisz = toupper( getch() ); if( klawisz=='n' ) break; // wczytywanie danych kolejnego elementu TDane nowe_dane; Wczytaj( nowe_dane ); // przydzielenie pamieci, skopiowanie i dodanie nowego elementu do listy if(! Dopisz( pierwszy, nowe_dane ) ) cout<<"\n\nblad przydzialu pamieci. Koniec wprowadzania.\n"; break; //while(1) //---------- FAZA WYSWIETLANIA ZAWARTOSCI LISTY --------------- if( pierwszy==null ) cout<<"\nlista jest pusta\n"; else cout<<"\nlista zawiera nastepujace elementy:"; TElementListy* aktualny; int licznik=0; for( aktualny=pierwszy; aktualny!=null; aktualny=aktualny->nastepny ) cout<<"\n\nelement numer: "<< ++licznik; Wyswietl( aktualny->dane ); cout<<"\nnacisnij dowolny klawisz\n"; getch(); //---------- FAZA USUWANIA LISTY - ZWALNIANIA PAMIECI --------------- while( pierwszy ) UsunElement( pierwszy ); cout<<"\nlista zostala usunieta."; cout<<"\nnacisnij dowolny klawisz aby zakonczyc"; getch(); - 8

// PROGRAM 4_4 // Przyklad obiektowego podejscia do oprogramowania // pojecia TDana (struktura modelujaca dane) // oraz pojecia TLista (struktura modelujaca liste danych) #include <iostream.h> #include <conio.h> // getch() #include <ctype.h> // toupper() // Nowy typ "TBoolean" modelujacy wartosci logiczne: prawda / falsz typedef char TBoolean; #define True 0xFF #define False 0x00 // Struktura TDane z metodami Wczytaj(), Wyswietl() modelujaca "dane" struct TDane // dane char tekst[30]; int liczba; char znak; // metody - podstawowe funkcje operujace na strukturze TDane void Wczytaj(void); void Wyswietl(void); ; void TDane::Wczytaj(void) cout<<"\n\nwprowadznie danych nowego elementu:\n"; cout<<"podaj tekst: "; cin>>tekst; cout<<"podaj liczbe: "; cin>>liczba; cout<<"podaj znak: "; cin>>znak; void TDane::Wyswietl(void) cout<<"\n tekst: " << tekst; cout<<"\n liczba: " << liczba; cout<<"\n znak: " << znak; - 9

// Pomocnicza struktura TElementListy struct TElementListy TDane dane; TElementListy* nastepny; ; //========================================================== // Struktura TLista z metodami Inicjalizuj(), Dopisz(), Wyswietl(), // UsunOstatni(), UsunWszystkieElementy(), // modelujaca jednokierukowa liste elementów TElementListy //========================================================== struct TLista // dane listy TElementListy* pierwszy; // metody - podstawowe operacje na liscie void Inicjalizuj(void); TBoolean Dopisz(const TDane& dane); TBoolean UsunElement(void); void UsunWszystkieElementy(void); void Wczytaj(void); void Wyswietl(void); ; // implementacje w/w metod dla struktury TLista void TLista::Inicjalizuj(void) pierwszy=null; // TLista::Inicjalizuj TBoolean TLista::Dopisz(const TDane& dane) TElementListy* nowy_element; nowy_element = new TElementListy; if( nowy_element==null ) // blad przydzialu pamieci return False; // skopiowanie danych i dolaczenie nowego elementu do listy nowy_element->dane = dane; nowy_element->nastepny = pierwszy; pierwszy = nowy_element; return True; // TLista::Dopisz - 10

TBoolean TLista::UsunOstatni(void) if(!pierwszy ) return False; else TElementListy* do_usuniecia; do_usuniecia = pierwszy; pierwszy = pierwszy->nastepny; delete do_usuniecia; return True; // TLista::UsunOstatni void TLista::UsunWszystkieElementy(void) while( pierwszy ) UsunOstatni(); // TLista::UsunWszystkieElementy void TLista::Wczytaj(void) int klawisz; while(1) cout<<"\n\nczy chcesz dodac nowy element do listy (t/n) : "; klawisz = toupper( getch() ); if( klawisz=='n' ) break; // wczytywanie danych kolejnego elementu TDane nowe_dane; nowe_dane.wczytaj(); // przydzielenie pamieci, skopiowanie i dodanie nowego elementu do listy if(! Dopisz( nowe_dane ) ) cout<<"\n\nblad przydzialu pamieci. Koniec wprowadzania.\n"; break; // while(1) // TLista::Wczytaj - 11

void TLista::Wyswietl(void) if( pierwszy==null ) cout<<"\nlista jest pusta\n"; else cout<<"\nlista zawiera nastepujace elementy:"; TElementListy* aktualny; int licznik=0; for( aktualny=pierwszy; aktualny!=null; aktualny=aktualny->nastepny ) cout<<"\n\nelement numer: "<< ++licznik; aktualny->dane.wyswietl(); cout<<"\nnacisnij dowolny klawisz\n"; getch(); // TLista::Wyswietl //-------------------------------------- Program glowny ----------------------------------------- void main() TLista lista; lista.inicjalizuj(); //-------- FAZA WCZYTYWANIA DANYCH I TWORZENIA LISTY ------------- lista.wczytaj(); //---------- FAZA WYSWIETLANIA ZAWARTOSCI LISY --------------- lista.wyswietl(); //---------- FAZA USUWANIA LISTY - ZWALNIANIA PAMIECI --------------- lista.usunwszystkieelementy(); cout<<"\nlista zostala usunieta."; cout<<"\nnacisnij dowolny klawisz aby zakonczyc"; getch(); - 12