• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[CR] C++ (#11): Znajdowanie największej liczby

VPS Starter Arubacloud
+2 głosów
5,959 wizyt
pytanie zadane 11 kwietnia 2016 w Nasze poradniki przez Mirosław Zelent Nałogowiec (34,750 p.)

CR = Code Review. O co chodzi? Zajrzyj tutaj
Pełna lista wszystkich Code Review? Zajrzyj tutaj

https://www.youtube.com/watch?v=63QjKBcIySs

Kod #1 z odcinka:

#include <iostream>

using namespace std;

int a,b,c;

int main()
{
   cout << "Podaj 3 liczby rozdzielone spacja: ";
   cin>>a>>b>>c;

   if ((a>=b) && (a>=c))
      cout<<"Najwieksza liczba to "<<a;

   else if ((b>=a) && (b>=c))
      cout<<"Najwieksza liczba to "<<b;

   else if ((c>=a) && (c>=b))
      cout<<"Najwieksza liczba to "<<c;

    return 0;
}

Kod #2 z odcinka:

#include <iostream>

using namespace std;

int a,b,c,m;

int main()
{
   cout << "Podaj 3 liczby rozdzielone spacja: ";
   cin>>a>>b>>c;

   m=a;
   if (b>m) m=b;
   if (c>m) m=c;

   cout<<"Najwieksza liczba to "<<m;

    return 0;
}

Paczka z odcinka: POBIERZ​

komentarz 11 września 2020 przez jwozniak Nowicjusz (100 p.)
edycja 11 września 2020 przez jwozniak
#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;

float a, b, c, d, e, m, srednia;
float wynik[5];

int main()
{
    cout << "Podaj dokladnie 5 liczb oddzielonych spacja: ";
    cin >> a >> b >> c >> d >> e;

    srednia = (a + b + c + d + e) / 5;
    cout << "Srednia z podanych przez ciebie liczb wynosi: " << srednia << endl;

    wynik[0] = abs(srednia - a); //obliczamy roznice, najmniejsza roznica bedzie oznaczala ze dana liczba znajduje sie najblizej sredniej
    wynik[1] = abs(srednia - b);
    wynik[2] = abs(srednia - c);
    wynik[3] = abs(srednia - d);
    wynik[4] = abs(srednia - e);

    m = wynik[0];
    if (wynik[1] < m)
        m = wynik[1];
    if (wynik[2] < m)
        m = wynik[2];
    if (wynik[3] < m)
        m = wynik[3];
    if (wynik[4] < m)
        m = wynik[4];

    if (m == wynik[0])
        cout << "Liczba najblizej sredniej jest: " << a << endl;
    if (m == wynik[1])
        cout << "Liczba najblizej sredniej jest: " << b << endl;
    if (m == wynik[2])
        cout << "Liczba najblizej sredniej jest: " << c << endl;
    if (m == wynik[3])
        cout << "Liczba najblizej sredniej jest: " << d << endl;
    if (m == wynik[4])
        cout << "Liczba najblizej sredniej jest: " << e << endl;

    return 0;
}
komentarz 23 października 2020 przez PR3mK5 Nowicjusz (100 p.)
Mam 'lepszą' (inną) propozycję, która sprawdza się przy dwóch i więcej tych samych wynikach ;)
"

#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
{
    int i, j, k, pom;

    cout<<"Podaj liczbe N liczb : ";
    int n;
    n=5;//cin>>n;
    cout <<endl<< "Podaj "<<n<<" liczb: " << endl;
    float tab[n], suma=0, srednia;

    tab[0]=6.5, tab[1]= 3.5, tab[2]= 0, tab[3]= 15, tab[4]= 0;
    //tab[0]=3, tab[1]= 5, tab[2]= 3, tab[3]= 1, tab[4]= 3;
    //tab[0]=-55, tab[1]= -44, tab[2]= -33, tab[3]= 11, tab[4]= 22;
    //tab[0]=3.42, tab[1]= -1.5, tab[2]=1.25, tab[3]=10.5, tab[4]=3.14;
    for(i=0; i<n; i++)
    {
        cout<<endl<<i+1<<"z"<<n<<".  "<<tab[i];
        //cin>>tab[i];
        suma+=tab[i];
    }
    cout<<endl;
    srednia=suma/n;
    //cout<<endl<<"Suma: "<<suma<<";
    cout<<endl<<"Srednia: "<<srednia<<endl;
    //----------------------
    float naj[n], buff, najbl;

    if(tab[0]==srednia)
    {
        najbl=tab[0];
        cout<<endl<<"Najblizsza sredniej: "<<najbl;
    }

    else if(tab[0]!=srednia)
    {
        for(j=0; j<n; j++)
        {
            naj[j]=abs(srednia-tab[j]);
            cout<<endl<<srednia<<" - "<<tab[j]<<" = "<<naj[j]<<endl;
        }
//-------------------------
        najbl=naj[0];
        for(k=1; k<n; k++)
        {
            if(najbl>=naj[k])
            {
                //cout<<najbl<<" > "<<naj[k]<<endl;
                najbl=naj[k];
                pom=k;
            }
        }
        //cout<<endl<<"najbl: k["<<pom<<"]"<<endl;
        cout<<endl<<"Najblizsza sredniej: "<<tab[pom];
    }
    for(int z=0; z<n; z++)
        {
            if(z!=pom && naj[z]==naj[pom])
            {
                cout<<" i "<<tab[z];
            }
        }
    return 0;
}
"
1
komentarz 26 maja 2022 przez lgrzesinski Nowicjusz (100 p.)
edycja 26 maja 2022 przez lgrzesinski

@Mirosław Zelent, Witam, moja toporna propozycja, po wielu latach przerwy: 

#include <iostream>

using namespace std;

int main()
{
    float a, b, c, d, e, ia, ib, ic, id, ie, s;


    cout << "Podaj liczby a, b, c, d, e oddzielone spacja:" << endl;
    cin >> a >> b >> c >> d >> e;
    cout << endl;

    s = (a+b+c+d+e)/5;

    cout << "Srednia: " << s << endl;

    cout << endl;

    ia = a-s;
    ib = b-s;
    ic = c-s;
    id = d-s;
    ie = e-s;

    if (ia<0) ia=ia*(-1);
    if (ib<0) ib=ib*(-1);
    if (ic<0) ic=ic*(-1);
    if (id<0) id=id*(-1);
    if (ie<0) ie=ie*(-1);

    // cout << ia << endl << ib << endl << ic << endl <<id << endl << ie << endl << endl;

    if ((ia==0) || (ia<=ib) && (ia<=ic) && (ia<=id) && (ia<=ie)) cout << "Najblizsza to liczba to a: " << a << endl;
    if ((ib==0) || (ib<=ia) && (ib<=ic) && (ib<=id) && (ib<=ie)) cout << "Najblizsza to liczba to b: " << b << endl;
    if ((ic==0) || (ic<=ib) && (ic<=ia) && (ic<=id) && (ic<=ie)) cout << "Najblizsza to liczba to c: " << c << endl;
    if ((id==0) || (id<=ia) && (id<=ib) && (id<=ic) && (id<=ie)) cout << "Najblizsza to liczba to d: " << d << endl;
    if ((ie==0) || (ie<=ia) && (ie<=ib) && (ie<=ic) && (ie<=id)) cout << "Najblizsza to liczba to e: " << e << endl;

    cout << endl;

}

!!!!!!!!!!!!!!!!!!!!!!!         To po ogarnięciu ostatnich lekcji:

#include <iostream>

using namespace std;

float liczba[5], wynik[5], s, m;

int main()
{

    cout << "Podaj liczby a, b, c, d, e:" << endl;
    for (int i=0; i<5; i++)
    {
        cin >> liczba[i];
    }

    cout << endl;

    for (int i=0; i<5; i++)
    {
        s+=liczba[i];
    }
    s = s/5;

    cout << "Srednia: " << s << endl;

    cout << endl;

    for (int i=0; i<5; i++)
    {
        wynik[i]=abs(liczba[i]-s);
        // cout << wynik[i] << endl;
    }

    cout << "Najblizsza liczba/y do sredniej to: ";

    m=wynik[0];
    if (wynik[1]<=m) m=wynik[1];
    if (wynik[2]<=m) m=wynik[2];
    if (wynik[3]<=m) m=wynik[3];
    if (wynik[4]<=m) m=wynik[4];

    for (int i=0; i<5; i++)
    {
        if (wynik[i]==m) cout << liczba[i] << " ";
    }

    cout << endl;

}

 

komentarz 3 maja 2023 przez JestemPiratem78 Nowicjusz (100 p.)

@jwozniak, mam mega podobnie, ale trochę krócej

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;

float a, b, c, d, e, s, n;
float liczba[5];

int main()
{
    cout << "podaj 5 liczb rozdzielonych enterem" << endl;
    cin>>a>>b>>c>>d>>e;
    s=((a+b+c+d+e)/5);

    cout<<"srednia tych liczb to "<<s<<endl;

    liczba[0]=abs(s-a);
    liczba[1]=abs(s-b);
    liczba[2]=abs(s-c);
    liczba[3]=abs(s-d);
    liczba[4]=abs(s-e);

    n=a;
    if(liczba[1]<=liczba[0]) n=b;
    if(liczba[2]<=liczba[1]) n=c;
    if(liczba[3]<=liczba[2]) n=d;
    if(liczba[4]<=liczba[3]) n=e;


    cout<<"najblizej sredniej jest "<<n<<endl;

    return 0;
}
 

4 odpowiedzi

+1 głos
odpowiedź 22 października 2021 przez ReznoR Początkujący (360 p.)

Zadanie Domowe — Odcinek #11. Znajdowanie liczby (lub liczb) najbliżej średniej z 5 liczb.

To moja wersja. Mam nadzieję, że mi wybaczycie, że komentarze do kodu/wyjaśnienia/zmienne są po angielsku.
Użyłem tablicy do przechowywania [nr] liczb (zamiast osobnych zmiennych). Dzięki temu można sobie wpisać dowolną ilość liczb. Program będzie się skalował. Wiedza o tablicach była już w poprzednich odcinkach kursu.
Dodałem też wszystkie testy dla programu (Test #0 – #3).

Algorytm rozwiązuje problem poprzez traktowanie liczby średniej jako środkowego/centralnego punktu zaczepienia. Znajduje dwie liczby: najbliższą liczbę poniżej średniej oraz najbliższą liczbę powyżej średniej. Potem oblicza, jak duża jest różnica między tymi liczbami i średnią. I w oparciu o wynik wybiera najbliższą z tych dwóch liczb. Opcjonalnie może też podać jako wynik drugą liczbę, jeśli obie liczby są tak samo blisko średniej.

Do porównania użyłem stałych maksymalnej i minimalnej wartości w C++ dla zmiennych double, które można znaleźć np. w C++ Reference (lub obliczyć i wpisać samemu, ale stałe są dla mnie wygodniejsze i chyba nieco bezpieczniejsze). Do tego celu dołączyłem bibliotekę <limits> (#include <limits>). Szukanie w C++ reference i dołączanie bibliotek jak i również wiedza o tym, jaka maksymalna lub minimalna możliwa liczba zmieści się w jakimś typie zmiennej w C++ było gdzieś w poprzednich odcinkach kursu.
Dodatkowo program podaje w output obie liczby które znalazł oraz różnice między nimi a średnią.

Przykładowy output programu dla Testu #3:

Enter 5 numbers:
Number 0: 6.5
Number 1: 3.5
Number 2: 0
Number 3: 15
Number 4: 0
-------------
Average        = 5
Closest Number = 3.5
Closest Number #2 = 6.5
-------------
Low Number  = 3.5
High Number = 6.5
-------------
Low Number Difference  = 1.5
High Number Difference = 1.5


Kod źródłowy:

#include <iostream>

/* This allows us to use lowest/highest possible number of a variable (like double)
https://en.cppreference.com/w/cpp/types/numeric_limits/ */
#include <limits>

using namespace std;

int main() {

  /* how many total numbers there are */
  int nr = 5;

  /* uncomment for manual user input */
  // double allNumbers[nr];

  /* Test #0 */
  // double allNumbers[nr] = {1.5, 3.14, 7.5, 1.25, 3.42};

  /* Test #1 */
  // double allNumbers[nr] = {-55, -44, -33, 11, 22};

  /* Test #2 */
  // double allNumbers[nr] = {3, 5, 3, 1, 3};

  /* Test #3 */
  double allNumbers[nr] = {6.5, 3.5, 0, 15, 0};

  /* For storing average value and sum of all numbers */
  double sumNumbers = 0;
  double average = 0;

  /* 
  https://en.cppreference.com/w/cpp/types/numeric_limits/lowest
  https://en.cppreference.com/w/cpp/types/numeric_limits/max
  */
  double lowNumber = numeric_limits<double>::lowest(); // lowest possible number in double
  double highNumber = numeric_limits<double>::max(); // highest possible number in double

  /* For storing differences between average and lowNumber/highNumber */
  double lowNumberDifference = 0;
  double highNumberDifference = 0;

  /* Store closest number */
  double closestNumber = 0;

  /* ======================= Program Start ========================= */

  cout << "Enter 5 numbers: ";
  cout << '\n';

  for (int i=0; i<nr; i++) {

    /* uncomment for manual user input */
    // cin >> allNumbers[i];

    /* Calculate sum of all numbers */
    sumNumbers += allNumbers[i];
  }

  /* Calculate average of all numbers */
  average = sumNumbers / nr;

  for (int i=0; i<nr; i++) {

    cout << "Number " << i << ": " << allNumbers[i] << '\n';

    /* Find closest number below average */
    if (allNumbers[i] <= average && allNumbers[i] > lowNumber) {
      lowNumber = allNumbers[i];
    }
    /* Find closest number above average */
    else if (allNumbers[i] >= average && allNumbers[i] < highNumber) {
      highNumber = allNumbers[i];
    }
  }

  /* Calculate what is the difference between average and found numbers, so a comparison can be made to find the closest one */
  lowNumberDifference = average - lowNumber;
  highNumberDifference = highNumber - average;

  /* Find the closest number from the two */
  if (lowNumberDifference <= highNumberDifference) {
    closestNumber = lowNumber;
  }
  else {
    closestNumber = highNumber;
  }

  /* ==================== Show calculation results =================== */

  cout << "-------------\n";
  cout << "Average        = " << average;

  cout << '\n';
  cout << "Closest Number = " << closestNumber;

  /* Optionally show 2 closest numbers, if both have the same difference to the average */
  if (lowNumberDifference == highNumberDifference) {
    cout << '\n';
    cout << "Closest Number #2 = " << highNumber;
  }

  cout << "\n-------------\n";
  cout << "Low Number  = " << lowNumber;

  cout << '\n';
  cout << "High Number = " << highNumber;  

  cout << "\n-------------\n";
  cout << "Low Number Difference  = " << lowNumberDifference;

  cout << '\n';
  cout << "High Number Difference = " << highNumberDifference;  
}

GitHub link

Pozdrawiam serdecznie i życzę miłego kodowania <3 Jeśli komuś to rozwiązanie pomogło to miło mi. Jeśli coś jest niezrozumiałe, to chętnie odpowiem i wyklaruję (tak jak umiem).

komentarz 22 października 2021 przez Whiskey_Taster Pasjonat (15,610 p.)
I myk, już poważny błąd w deklaracji tablicy. Użyta zmienna powinna być const lub constexpr, jak chcesz tak deklarować tablice.
komentarz 20 października 2023 przez Jan-Rychlik-SH Nowicjusz (100 p.)

@ReznoR, 

@Mirosław Zelent, mój kod

#include <iostream>

using namespace std;


int main()

{

    float a,b,c,d,e;

    cout<<"\nPodaj 1 liczbe: "; cin>>a;

    cout<<"\nPodaj 2 liczbe: "; cin>>b;

    cout<<"\nPodaj 3 liczbe: "; cin>>c;

    cout<<"\nPodaj 4 liczbe: "; cin>>d;

    cout<<"\nPodaj 5 liczbe: "; cin>>e;


    float srednia = (a+b+c+d+e)/5;

    cout<<"\nSrednia = "<<srednia;

    float najblizej=a, najblizej2, bliskosc = abs(srednia-a), bliskosc2;


    if(abs(srednia-b)<abs(bliskosc)){ najblizej=b; bliskosc = abs(srednia-b);}

    else if(abs(srednia-b)<=abs(bliskosc)){najblizej2=b; bliskosc2 = abs(srednia-b);}


    if(abs(srednia-c)<abs(bliskosc)){ najblizej=c; bliskosc = abs(srednia-c);}

    else if(abs(srednia-c)<=abs(bliskosc)){najblizej2=c; bliskosc2 = abs(srednia-c);}


    if(abs(srednia-d)<abs(bliskosc)){ najblizej=d; bliskosc = abs(srednia-d);}

    else if(abs(srednia-d)<=abs(bliskosc)){najblizej2=d; bliskosc2 = abs(srednia-d);}

   

    if(abs(srednia-e)<abs(bliskosc)){ najblizej=e; bliskosc = abs(srednia-e);}

    else if(abs(srednia-e)<=abs(bliskosc)){najblizej2=e; bliskosc2 = abs(srednia-e);}

    if(bliskosc==bliskosc2)

        if(najblizej2!=najblizej)

            cout<<"\nnajblizej sredniej sa liczby: "<<najblizej<<" i "<<najblizej2;

        else

            cout<<"\nNAJBLIZEJ SREDNIEJ JEST LICZBA: "<<najblizej;

    else

        cout<<"\nnajblizej sredniej jest liczba: "<<najblizej;

    return 0;

}

 

0 głosów
odpowiedź 12 kwietnia 2016 przez maly Nałogowiec (37,190 p.)

Jeśli liczby nie są w tablicy, tak jak w przykładzie z kursu to przy większej ich ilości może być problem z napisaniem algorytmu min max, rozwiązać to można tworząc tymczasową tablicę.

Za pomocą kontenera std::vector.

#include <vector>

int a = 7, b = 9, c = 6;
std::vector<int> liczby{a,b,c};

wtedy znalezienie maksymalnej wartości można zrealizować typowym algorytmem

int najwieksza = liczby[0];
for(auto liczba:liczby)
	if(liczba > najwieksza)
		najwieksza = liczba;
std::cout << "najwieksza to " << najwieksza << "\n";

lub wykorzystując przeznaczone do tego funkcje

#include <algorithm>

std::cout << "najmniejsza to " << *std::min_element(liczby.begin(), liczby.end()) << "\n";
std::cout << "najwieksza to " << *std::max_element(liczby.begin(), liczby.end()) << "\n";

Inny ciekawy sposób zapisu

int a = 7, b = 9, c = 6;

int najwieksza = a;
for(auto liczba:{a,b,c})
	if(liczba > najwieksza)
		najwieksza = liczba;
std::cout << "najwieksza to " << najwieksza << "\n";

Za pomocą std::valarray.

#include <valarray>

int a = 7, b = 9, c = 6;
std::valarray<int> liczby({a,b,c});

std::cout << "najmniejsza to " << liczby.min() << "\n";
std::cout << "najwieksza to " << liczby.max() << "\n";

 

2
komentarz 12 kwietnia 2016 przez niezalogowany
Nie sądzisz że stosowanie kontenerów na dane w kursie podstawowym w dodatku w lekcji która jest zupełnie o czymś innym nie jest stosowne?

Podobnie MZ raczej chodziło o pokazanie jak taki algorytm można zrobić, więc użycie gotowych funkcji jest dziwnym pomysłem w lekcji o algorytmie szukania max (nie bronię go za nieużycie tablic), w dodatku stworzenie kontenera na 3 zmienne mija się z celem, lepiej było użyć wzoru na element maksymalny, co byłoby znacznie mniej kosztowne.
komentarz 12 kwietnia 2016 przez maly Nałogowiec (37,190 p.)
Zagadzam się z Tobą w zupełności, rzuciłem tylko informację dla chcących takową posiadać.
komentarz 12 kwietnia 2016 przez niezalogowany
To ja dorzucę jeszcze informację, że jeżeli ktoś potrzebuje elementu min i max jednocześnie, to można zejść z ilością porównań jakie się wykonuje (złożoności się nie przebije, to dalej O(n) )
1
komentarz 12 kwietnia 2016 przez maly Nałogowiec (37,190 p.)

Eh, nie pokazałem najprostszych możliwych rozwiązań.

int liczby[]={a,b,c};
 
int najwieksza = a;
for(auto liczba:liczby)
	if(liczba > najwieksza)
		najwieksza = liczba;
		
std::cout << "najwieksza to " << najwieksza << "\n";

znajdowanie minimalnej i maksymalnej równocześnie.

#include <algorithm>

int a = 7, b = 9, c = 6;
auto result = std::minmax({a,b,c});
std::cout << "najmniejsza to " << result.first << "\n";
std::cout << "najwieksza to " << result.second << "\n";

 

–1 głos
odpowiedź 11 kwietnia 2016 przez Mateusz11 Pasjonat (22,910 p.)
Wszystkie zmienne są globalne :(
2
komentarz 11 kwietnia 2016 przez Aisekai Nałogowiec (42,190 p.)
Ja bym jeszcze pokazał, że takie coś można zrobić za pomocą pętli, oraz nazwałbym inaczej zmienną m
–1 głos
odpowiedź 17 sierpnia 2021 przez PepeSawyer Nowicjusz (140 p.)
Stworzyłem coś takiego:

#include <iostream>

using namespace std;

float a, b, c, d, e, srednia, a1, b1, c1, d1, e1, najb;

int main()
{
    cout << "Podaj 5 liczb: " << endl;
    cin >> a >> b >> c >> d >> e;

srednia = (a+b+c+d+e)/5;
    cout << "Srednia: " << srednia << endl;

    a1 = ((a/srednia)-1);
    b1 = ((b/srednia)-1);
    c1 = ((c/srednia)-1);
    d1 = ((d/srednia)-1);
    e1 = ((e/srednia)-1);
    //cout << a1 << endl << b1 << endl << c1 << endl << d1 << endl << e1 << endl;

    if (a1<0) a1=a1*(-1);
    if (b1<0) b1=b1*(-1);
    if (c1<0) c1=c1*(-1);
    if (d1<0) d1=d1*(-1);
    if (e1<0) e1=e1*(-1);
    //cout << "Wyniki: " << endl << a1 << endl << b1 << endl << c1 << endl << d1 << endl << e1 << endl;

    najb=a1;
    if (b1<najb) najb=b1;
    if (c1<najb) najb=c1;
    if (d1<najb) najb=d1;
    if (e1<najb) najb=e1;
    //cout << "Najb: " << najb << endl;

    if (najb == a1) cout << "Najblizej: "<< a << endl;
    if (najb == b1) cout << "Najblizej: "<< b << endl;
    if (najb == c1) cout << "Najblizej: "<< c << endl;
    if (najb == d1) cout << "Najblizej: "<< d << endl;
    if (najb == e1) cout << "Najblizej: "<< e << endl;

    return 0;
}
 

Podaje wszystkie właściwe odpowiedzi w teście nr 2 ale z jakiegoś powodu nie chce podać odpowiedzi 3.5 i podaje samo 6.5 w teście 3 mimo, że teoretycznie powinno jako, że wyniki działań na liczbach 3.5 i 6.5 są identyczne w moim kodzie.

Podobne pytania

+1 głos
3 odpowiedzi 950 wizyt
+1 głos
0 odpowiedzi 2,000 wizyt
+2 głosów
1 odpowiedź 6,653 wizyt

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...