Zajęcia 6 wskaźniki i tablice dynamiczne

Podobne dokumenty
Zajęcia 6 wskaźniki i tablice dynamiczne

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

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

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

Lab 9 Podstawy Programowania

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

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

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

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Zmienne i struktury dynamiczne

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Algorytmy i język C++

do instrukcja while (wyrażenie);

Część 4 życie programu

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

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

Zajęcia 4 procedury i funkcje

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

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

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 wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

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

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

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Wskaźniki. Informatyka

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 komputerowe. Zajęcia 3

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

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

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

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:

Podstawy programowania w języku C++

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

Programowanie komputerowe. Zajęcia 4

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

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Zadania z podstaw programowania obiektowego

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

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

Struktury, unie, formatowanie, wskaźniki

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Techniki Programowania wskaźniki 2

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

Deklaracja struktury w C++

I - Microsoft Visual Studio C++

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

Alokacja pamięci dla tablicy dwuwymiarowej

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

Język C++ zajęcia nr 2

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

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

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

Programowanie - wykład 4

DYNAMICZNE PRZYDZIELANIE PAMIECI

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.

Proste programy w C++ zadania

tablica: dane_liczbowe

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

C++ wprowadzanie zmiennych

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

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

Programowanie w języku Java

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

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

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

Podstawy programowania

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

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

Programowanie obiektowe W3

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

Zasady programowania Dokumentacja

Lista 2. int porownaj_liczby_normalnie(const int a, const int b) { if(a==b) return 0; if(a>b)return1; return-1; }

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

ZASADY PROGRAMOWANIA KOMPUTERÓW

Wykład 1: Wskaźniki i zmienne dynamiczne

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

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

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

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

Tablice jednowymiarowe

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

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

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

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

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

Podstawy programowania. Podstawy C# Tablice

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Programowanie w języku C++

Programowanie komputerowe. Zajęcia 5

Podstawy programowania w języku C++

Inicjacja tablicy jednowymiarowej

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

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

Podstawy programowania

Programowanie i struktury danych

Programowanie i struktury danych

Transkrypt:

Zajęcia 6 wskaźniki i tablice dynamiczne 1. Napisz funkcję void zamien(int *a, int *b), która otrzymuje wskaźniki dwóch zmiennych typu całkowitego, a następnie dokonuje zamiany wartości wskazywanych zmiennych. int main(int argc, char *argv[]) { int pierwsza = 42; int druga = 1; cout << "Przed zamiana:\n" << "\tpierwsza: " << pierwsza << endl << "\tdruga: " << druga << endl; zamien(&pierwsza, &druga); cout << "Po zamianie:\n" << "\tpierwsza: " << pierwsza << endl << "\tdruga: " << druga << endl; Przykładowy wydruk: Przed zamiana: pierwsza: 42 druga: 1 Po zamianie: pierwsza: 1 druga: 42 2. Napisz funkcję void minmax(int tab[], int w, int* wmin, int* wmax), która szuka w podanym ciągu najmniejszego i największego elementu. Znalezione wartości mają zostać zapisane w zmiennych wskazywanych przez parametry (wskaźniki) wmin oraz wmax. Parametr dl określa liczbę elementów w ciągu (tablicy) tab. 13

int main(){ int t[] = {3, -4, 1, 0, 10, 5; int min, max; minmax(t, sizeof(t) / sizeof(t[0]), &min, &max); cout << "Najmniejszy i najwieksy element ciągu, to " << min << ", " << max << endl; 3. Zdefiniuj funkcję: void strsl(char s1[], char s2[], char* &dluzszy, char* &krotszy), która przyjmuje jako parametry dwa łańcuchy ( s1 oraz s2 ) i dwa wskaźniki ( dluzszy, krotszy ). Funkcja ta ma przypisać wskaźnikom dluzszy i krotszy odpowiednio adres dłuższego oraz krótszego z podanych łańcuchów. W przypadku, gdy są one równej długości to wskaźnik dluzszy ma wskazywać na s1, natomiast wskaźnik krotszy na łańcuch s2. char s1[100]; char s2[100]; cout << "Podaj pierwszy ciag: "; cin >> s1; cout << "Podaj drugi ciag: "; cin >> s2; char* krotszy; char* dluzszy; strls(s1, s2, dluzszy, krotszy); cout << "Dluzszy z podanych lancuchow to: " << dluzszy << endl << "Krotszy z podanych lancuchow to: " << krotszy << endl; 4. Napisz funkcję void ptradv(int* wsk, int n), która wyświetla adres przechowywany we wskaźniku wsk oraz wartość zmiennej przez niego wskazywanej. W kolejnym kroku funkcja przesuwa wskaźnik ( wsk += 1 ) i powtarza powyższe czynności tyle razy ile wynosi wartość parametru n. Przykład: 14

Adres: 0x12312320, wartość: 12 Adres: 0x12312324, wartość: -123 int t[] = { 1, 3, -6, 4; int* z; ptradv(t, 4); z = t; ptradv(z, 4); 5. Napisz funkcję int * odwroc(int *tab, int rozmiar), która tworzy kopię (operator new) podanej tablicy, ale z elementami w odwrotnym porządku. Wynikiem funkcji jest wskaźnik do utworzonej tablicy. Przykład programu korzystającego z tej funkcji: int liczby [] = { 1, 2, 3, 4 ; int *odwrotnie = odwroc(liczby, 4); for (int i = 0; i < 4; ++i) { cout << odwrotnie[i] << " "; // powinno wyświetlić: 4 3 2 1 delete [] odwrotnie; // zwolnienie przydzielonej pamięci 6. Napisz funkcję void tabliczka(int r), która tworzy tabliczkę mnożenia o wielkości r x r. Następnie w pętli wyświetla wynik mnożenia wskazanych przez użytkownika liczb (dopóty, dopóki użytkownik nie zdecyduje, że już koniec). Następnie wyświetlona zostaje cała tabliczka mnożenia. Uwaga: Tabliczka mnożenia ma zostać zapisana w dwuwymiarowej tablicy dynamicznej, proszę więc pamiętać o przydziale i zwolnieniu pamięci. int i; cout<<"podaj wielkość tabliczki mnożenia: "; cin>>i; tabliczka(i); 15

7. Napisz funkcję string * podziel na slowa(char tekst[], int &ile slow), której zadaniem jest podzielenie ciągu tekst na słowa (słowo to niepusty ciąg znaków nie zawierający białego znaku). Wynikiem funkcji jest dynamiczna tablica słów (każde typu string ), której długość przekazywana jest przez parametr (referencję) &ile slow. Przykładowy program korzystający z funkcji: char s[]= " Ala ma kota. \nkot ma mysz. "; int ile_slow; string * slowa = podziel_na_slowa(s, ile_slow); for (int i = 0; i < ile_slow; ++i) { cout << i << " " << slowa[i] << endl; delete [] slowa; Wydruk uzyskany w wyniku jego wykonania: 0 Ala 1 ma 2 kota. 3 Kot 4 ma 5 mysz. 8. Napisz funkcje void ilepamieci() która sprawdza jaką największą tablicę znaków można utworzyć dynamicznie, przy założeniu że rozmiar tablicy ma być potęgą liczby 2. Funkcja powinna generować wydruk podobny do poniższego: Proba przydzielenia: 2 bajtow, wynik: OK Proba przydzielenia: 4 bajtow, wynik: OK Proba przydzielenia: 8 bajtow, wynik: OK Proba przydzielenia: 16 bajtow, wynik: OK Proba przydzielenia: 32 bajtow, wynik: OK Proba przydzielenia: 64 bajtow, wynik: OK Proba przydzielenia: 128 bajtow, wynik: OK... 16

Proba przydzielenia: 268435456 bajtow, wynik: OK Proba przydzielenia: 536870912 bajtow, wynik: OK Próba przydzielenia: 1073741824 bajtów, wynik: OK Próba przydzielenia: 2147483648 bajtów, wynik: Nie powiodla sie ilepamieci(); 9. Napisz funkcje, która jako parametr otrzymuje dwuwymiarową tablicę liczb całkowitych oraz liczbę całkowitą oznaczającą kolumnę. Funkcja nie zwraca wartości, ale sortuje wiersze w tabeli w kolejności rosnącej - zgodnie z kolumną, której indeks przekazany jest przez wspomniany, drugi parametr. W rzeczywistości należy zmieniać jedynie adresy tablic (odpowiadających za wiersze w tabeli). Przykładowa tablica przed wywołaniem funkcji 2 3 5 1 0 2 1 2 3 9 0 9 4 1 4 9 2 6 5 1 6 8 0 2 7 Ta sama tabela po wywołaniu fukcji dla kolumny o indeksie 2: 6 8 0 2 7 2 1 2 3 9 0 9 4 1 4 2 3 5 1 0 9 2 6 5 1 17