6 CPA 4 Accessing different kind of data



int ** ptrarr;            -> wskaznik na wskaznik do int, przykład alokacja (10 wierszy):

ptrarr=new int  *[10];
for (r=0;r<10;r++)                                ->w przeciwienstwie do zwykłej tablicy
   ptrarr[r]=new int[kolumn];               -> jak widać każdy rząd morze mieć inną liczbę kolumn


dostęp:
ptrarr[r][c]=0;



Konwersja:

automatyczna(niejawna)   lub  jawna (rzutowanie)

L - Long

Konwersja typu C:
(int)k

Konwersja typu funkcyjnego:   (działa także dla obiektów)
int(k)

Jeśli zmienne zmienno przecinkowe (float  7 znaków i double 15 znaków są bardzo duże lub małe
to również następuje strata dokładności)

Jeśli dodajemy zmienne różnej długości bitowej, najmniejsza zostanie zpromowana do największej



Stringi
#include<string>              -> nie jest wbudowany więc trzeba dyrektywę

string nazwa="costam";      -> użyć ""   bo ' ' sa dla literałów
albo
string nazwa("costam");
wiec
string nazwa2(nazwa); rownoznaczne z string nazwa2=nazwa;

można używać  +   żeby dodawać

cout << TheGood + " & " + TheBad << endl;
TheQuestion += "or not to be";
ale
String = "A" + "B";     NIE ZADZIAŁA, czyli zmienna + "cos tam"

wpisanie spacji z klawiatury:
string LineOfTypes;
        cin >> LineOfTypes;

spowoduje że wczyta tylko pierwsze słowo
żeby wczytać cały wiersz GETLINE

getline(cin,LineOfTypes);


MOZNA porównywać stringi za pomocą ==
albo za pomocą: if(secret.compare(password) == 0)


FUNKCJE String:

Substring - bierze wycinek i tworzy nowy
str2 = str1.substr(1,2)    1- start   2 -długość

size i lenght
S.size();

find - znajduje string w innym stringu jak nie znajdzie zwraca string::npos
int where_it_begins = S.find(another_string, start_here);

Rozmiary:
cout << "length = " << s.length() << endl;
        cout << "capacity = " << s.capacity() << endl;
        cout << "max size = " << s.max_size() << endl;


Dodanie stringów (jak + )
string str1 = "content";
str2 = "appendix";
str1.append(str2);    -> ale bardziej uniwersalny bo moze str1.append(str2,0,3);

Insert może wsadzic w srodek:
string quote = "to be ";
quote.append(quote);
quote.insert(6, "or not ");     -> wsadzi or not od 6 znaku


Assign zastępuje string
string sky;
sky.assign(80,'*');

Replace zastępuje fragment innym
string ToDo = "I'll think about that in one hour";
string Schedule = "today yesterday tomorrow";

ToDo.replace(22, 12, Schedule, 16, 8);

Erase - zamazuje
WhereAreWe.erase(38, 8)


Swap - zamienia
Drink.swap(Needs);




Namespaces:

jeśli pominiesz
using namespace std;

to musisz:
std::cout <<...


możesz tworzyć swoje przestrzenie nazw w nich nazywać zmienne tak samo a potem do niech się odwoływać z użyciem ::  albo otwierać i zamykać osobno przestrzen nazw przed wywołaniem
czyli najpierw określic namespace a potem otworzyć using namespaces

namespace Hogwarts {
int Troll = 1;
}
namespace Mordor {
int Troll = 2 ;
}
int main(void) {
using namespace Hogwarts;
cout << Troll << " " ;
}
using namespace Mordor;
cout << Troll << endl;
}
return 0;

}



ZADANIA

Zad1:

    int main() {
        short s = 1;
        int i = 2;
        long l = 3;
        float f = 4.4;
        double d = 6.6;
     
        cout << s/float(i) + int(f)/i + long(d)/s;
        return 0;
    }

Wynik 8.5  bo 
short s = 1;
int i = 2;
cout << s/float(i); 
da 0,5  (wynik we float)

operacja z int w całkowitych, long rzutowany na double zrobi operacje na long


Zad2:
    int main() {
        string s = "a";
     
        cout << s  << "b" + "c";

Błąd bo nie można "b" + "c"