C++ nauka

Polskie strony do nauki programowania i konkurowania z innymi programistami

szkopul.edu.pl
pl.spoj.com

Zagraniczne strony do nauki programowania i konkurowania z innymi programistami

codesignal.com
codeforces.com

Mistrzostwa świata w hakowaniu

hackercup

Poniżej przedstawiam wybranie, ciekawe zagadnienia przydatne w programowaniu gier, w pisaniu wirusów i wygrywaniu konkursów programistycznych w C++.

Typy danych w C++

Link do tabeli typów danych

Tabela kodów ASCII

Link do tabeli

Przyspieszenie wykonywania działań algorytmicznych

Na początku programu, w metodzie mailn dodaj dwie linijki:

ios_base::sync_with_stdio(0);
cin.tie(0);

Te powyższe dwie linijki dopisz dopiero gdy wszystko dobrze działa. U mnie powodują one niewyświetlanie cout w konsoli. Nie przeszkadza to oczywiści w akceptacji programu przez sędziego.

Zamiast endl używaj \n

cout << "Hello\n";

Jeżeli wprowadzasz dane w pętli, to rób to tak:

while(cin >> znak >> a >> b)
{

}

Tak jak powyżej jest znacznie szybciej. Poniżej przedstawiam metodę znacznie wolniejszą powodującą, że twoje zadania wyświetlą komunikat: Przekroczono limit czasu.

while(true)
{
   cin >> znak;
   cin >> a;
   cin >> b;
}

Warto przeczytać posta na temat przyspieszania działania algorytmów:

przyspieszanie działania programów w C++

Jakich bibliotek można używać na Olimpiadzie Informatycznej

Używamy C++ 11 i jego biblioteki standardowej. Jeżeli nie jesteś pewnien czy dana biblioteka do niej należy, to kliknij w poniższy link:

cppreference.com

Możesz załączyć za jednym razem wszystkie dozwolone biblioteki. Nie będziesz musiał osobno inkludować wszystkich używanych bibliotek.

#include<bits/stdc++.h> 

Polskie znaki

Na początku metody main (w jej wnętrzu) umieść taką linijkę kodu:

setlocale(LC_ALL,"");

Czyszczenie ekranu

#include <windows.h>
system("cls");

Pause - zatrzymanie programu

Możemy zatrzymać działanie programu.

#include<windows.h>
system("pause");

Program uruchomi dalsze instrukcje po przyciśnięciu dowolnego klawisza.

Jednak w konsoli pojawi się też komunikat: Aby kontynuować, naciśnij dowolny klawisz...

Jeżeli nie chcesz tego komunikatu to użyj polecenia:

system("pause>nul");

Jeszcze inna metoda to:

#include<conio.h>
_getch();

Usypianie programu

#include <windows.h>
Sleep(1000);

Zmiana koloru wszystkim napisom w konsoli

#include <windows.h>
system("color A");

Zmiana koloru poszczególnych linii w konsoli

#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
   for(int i=0; i<256; i++)
   {
      SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), i);
      cout << "Tekst typu:" << i << endl;
   }

return 0;
}

Tworzenie funkcji zmieniającej kolor poszczególnych tekstów

Poniższa funkcja pozwala ustawiać kolor poszczególnych linii.

#include <iostream>
#include <windows.h>
using namespace std;
void kolor(int k)
{
     SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), k);
}
int main()
{
    kolor(5);
    cout << "tekst" << endl;
    kolor(2);
    cout << "dom"  << endl;
    kolor(5);
    cout << "dom"  << endl;
    kolor(2);
    cout << "dom" << endl;
    return 0;
}

Ściąga z kolorami:

Rozmiar konsoli

#include <windows.h> 

void SetWindow(int Width, int Height) 
    { 
    _COORD coord; 
    coord.= Width; 
    coord.= Height; 

    _SMALL_RECT Rect; 
    Rect.Top = 0; 
    Rect.Left = 0; 
    Rect.Bottom = Height - 1; 
    Rect.Right = Width - 1; 

    HANDLE Handle = GetStdHandle(STD_OUTPUT_HANDLE);      // Get Handle 
    SetConsoleScreenBufferSize(Handle, coord);            // Set Buffer Size 
    SetConsoleWindowInfo(Handle, TRUE, &Rect);            // Set Window Size 
    } 

void main(void) 
    {     
       SetWindow(100,50); 
    }  

Ukrycie Scrollbarów

#include <windows.h>

void RemoveScrollbar()
{
   HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
   CONSOLE_SCREEN_BUFFER_INFO info;
   GetConsoleScreenBufferInfo(handle, &info);
   COORD new_size =
   {
      info.srWindow.Right - info.srWindow.Left + 1,
      info.srWindow.Bottom - info.srWindow.Top + 1
   };
SetConsoleScreenBufferSize(handle, new_size);
}

int main()
{
   RemoveScrollbar();
}

Zmiana nazwy tytułu konsoli windows

Sposób, który działa w Code Blocks:

#include <windows.h>

int main()
{
  SetConsoleTitle("My First Game");
}

Sposób, który działa w Visual Studio:

SetConsoleTitle(_T("My First Game"));

Znaki specjalne, które mogą przydać się tworzeniu gier (buźka, serce, strzałki)

#include <iostream>
#include <windows.h>
#include <string>
#include <cstdlib>
using namespace std;
int main()
{
	cout << endl;
	cout << "   \u0001 - \\u0001 \t";
	cout << "   \u0002 - \\u0002 \t";
	cout << "   \u0003 - \\u0003 \t";
	cout << "   \u0004 - \\u0004 \t" << endl << endl;
	cout << "   \u0005 - \\u0005 \t";
	cout << "   \u0006 - \\u0006 \t";
	cout << "   \u0010 - \\u0010 \t";
	cout << "   \u0011 - \\u0011 \t" << endl << endl;
	cout << "   \u0012 - \\u0012 \t";
	cout << "   \u0013 - \\u0013 \t";
	cout << "   \u0014 - \\u0014 \t";
	cout << "   \u0015 - \\u0015 \t" << endl << endl;
	cout << "   \u0016 - \\u0016 \t";
	cout << "   \u0017 - \\u0017 \t";
	cout << "   \u0018 - \\u0018 \t";
	cout << "   \u0019 - \\u0019 \t" << endl << endl;
	cout << "   \u0021 - \\u0021 \t";
	cout << "   \u0022 - \\u0022 \t";
	cout << "   \u0023 - \\u0023 \t";
	cout << "   \u0024 - \\u0024 \t" << endl << endl;
	cout << "   \u0025 - \\u0025 \t";
	cout << "   \u0026 - \\u0026 \t";
	cout << "   \u0027 - \\u0027 \t";
	cout << "   \u0028 - \\u0028 \t" << endl << endl;
	cout << "   \u0029 - \\u0029 \t";
	cout << "   \u0030 - \\u0030 \t";
	system("pause>nul");
	return 0;
}

Losowanie liczb

W poniższym przykładzie losujemy liczby od 0 do 9.

cout << rand() % 10  << " ";

Jeżeli chcielibyśmy losować od 1 do 10 to należy uczynić tak:

cout << rand() % 10 + 1 << " ";

Przykład całego programu z potrzebnymi bibliotekami i funkcją pseudolosową.

#include "stdafx.h" // linijka wklejana przez Visual Studio
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;

int main()
{
srand(time(NULL));
do
{
cout << rand() % 10<< " ";
Sleep(100);
} while (true);

return 0;
}

Zamiana string na integer

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

int main()
{
   string napis = "123";
   int i = atoi(napis.c_str());
   cout << i+1 << endl;
   return 0;
}

Zamiana integer na string

Poniższa metoda nie zawsze działa. Przetestuj czy Twój kompilator ją akceptuje.

#include <iostream>
#include <string>
#include <windows.h> 

using namespace std;

int main()
{
   string s = to_string(54);
   cout << s;
   system("pause");
   return 0;
}

Poniżej przedstawiam metodę bardziej skuteczną. Tworzymy własną funkcję i potem możemy ją używać.
Biblioteka sstream jest dozwolona na olimpiadach.

#include <sstream>

using namespace std;

template
string to_string(const T& obj)
{
    stringstream ss;
    ss << obj;
    return ss.str();
}

Char to integer

To rozwiązanie bazuje na tabeli kodów ASCII.

#include <iostream>
#include <string>
#include <windows.h> 
using namespace std;
int main()
{
   char character = '1';
   int x = (int)character - 48;
   cout << x;
   system("pause");
   return 0;
}

Char to string

Link do paru sposobów

#include <iostream>
#include <string>
#include <windows.h> 
using namespace std;
int main()
{
  string a;
  char b = 'f';
  a += b;
  cout << a;
  system("pause");
  return 0;
}

String to char

int x = 65;
char znak = char(int);

Integer to float

#include <iostream>

using namespace std;

int main()
{
    float x;
    int y = 7;
    int z = 3;
    cout << y/(float)z;

    return 0;
}

Łączenie stringów

#include <iostream>
#include <string>


using namespace std;

int main()
{
   string str = "ala";
   str.append(" ma kota");
   cout <<  str;
   return 0;
}

Inne metody łączenia stringów:

#include <iostream>
#include <string>

using namespace std;

int main() {
   string a = "Ala ma ";
   string b = "kota.";
   string c = a + b;
   cout << a + b << endl;
   cout << c << endl;
   return 0;
}

Wyświetlanie jednej litery ze stringu

#include <string>
string a="Ala";
cout << a[i];

Toupper & Tolower - wielka i mała litera

Poniżej przedstawiam metodę zmienienia malej litery w wielka i na odwrót. Dotyczy to znaku char.
Pokazuję też dwie metody wydruku: putchar i cout.

#include<bits/stdc++.h>

using namespace std;

int main()
{
    char litera1 = 'a';
    char litera2 = 'b';
    putchar (toupper(litera1));
    cout << (char)toupper(litera2);

    char litera3 = 'C';
    char litera4 = 'D';
    putchar (tolower(litera3));
    cout << (char)tolower(litera4);

    return 0;
}

Długość stringu

str.length();

Wprowadzenie tekstu ze spacjami z klawiatury

#include <string>
string zdanie;
getline (cin, zdanie);

// na klawiaturze "Ala ma kota"[enter]

cout << zdanie;

Tablica char stworzona ze string

Link do kodu

Wyszukanie pozycji konkretnego napisu w strigu

#include <iostream>
#include <string>

using namespace std;
int main() {
   string a = "Ala ma kota.";
   size_t pozycja = a.find("ma");
   cout << pozycja << endl;
   return 0;
}

Kasowanie części stringu

W poniższym przykładzie wykasujemy słowo "ma" za stringu "Ala ma kota".
4 - oznacza od którego znaku zaczynamy (łącznie ze spacjami).
2 - oznacza ile usuniemy znaków.

#include <iostream>
#include <string>

using namespace std;

int main() {
   string a = "Ala ma kota.";
   a.erase(4,2);
   cout << a << endl;
   return 0;
}

Wstawianie do stringu

#include <iostream>
#include <string>

using namespace std;

int main() {
   string a = "Ala ma kota.";
   cout << a << endl;
   a.insert(11, " Mruczka");
   cout << a << endl;
}

11 - pozycja na którą wstawiamy. Po przecinku jest tekst, który wklejamy

Zastępowanie fragmentu stringu innym tekstem

#include <iostream>
#include <string>

using namespace std;

int main() {
  string a = "Ala ma kota.";
  cout << a << endl;
  a.replace(4,2, "patrzy na");
  cout << a << endl;
  return 0;
}

4 - miejsce od którego zaczynamy.
2 - ilość znaków do zastąpienia.
"patrzy na" - tekst, który zostanie wklejony ma miejsce "ma".

Wycięcie części łańcucha i zapis do nowej zmiennej

#include <iostream>
#include <string>

using namespace std;

int main() {
   string a = "Ala ma kota.";
   cout << a << endl;
   string b = a.substr(0,3);
   cout << b << endl;
   return 0;
}

Podmiana wybranego znaku w stringu na inny znak

Jest to sposób na zamianę wszystkich znaków zawartych w stringu na inny znak.
W przykładzie zamieniamy literę m na t.

#include "stdafx.h"
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
   string tekst ="mama";
   replace(tekst.begin(), tekst.end(), 'u', 'f');
   cout << tekst << endl;
   system("pause");
   return 0;
}

Zamiana konkretnego znaku w napisie

Ten sposób bazuje na tablicy typu char.

Taka tablica działa jak napis. W poniższym przykładzie zamieniamy s na #.

#include <iostream>

using namespace std;

int main()
{
   char tekst[] = "napis";
   tekst[4] = '#';
   cout << tekst << endl;
   system("pause");
   return 0;
}

Wyciągnięcie z liczby wartości setek, dziesiątek i jedności.

jednosci = liczba%10;
dziesiatki = liczba/10%10;
setki = liczba/100%10;

Zaokrąglanie

http://cpp0x.pl/kursy/Kurs-C++/Biblioteka-math-h/322

Zaokrąglenie do trzech miejsc po przecinku

#include 

double liczba = 12.23212;
cout<< fixed;
cout << setprecision(3);
cout << liczba;

Usunięcie zapisu naukowego

#include <iomanip>

cout<< fixed;

Rozmiar tablicy

sizeof(tab)/sizeof(tab[0]);

Pobranie stringa ze spacjami

#include <iostream>
#include <string>
using namespace std;

int main()
{
   string linia;
   getline( cin, linia );
   cout << linia << endl;
   return 0;
}

Pobieranie jednego znaku bez wciśnięcia ENTER

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


using namespace std;

int main()
{
   char x;

   cout << "Podaj litere ";
   x = _getche();

   cout << endl << "Litera to: " << x;

   _getch(); // tu użyto jako pauzę
return 0;
}

Wczytanie kilku liczb odzielonych spacjami

Zazwyczaj w zadaniach najpierw podaje się liczbę oznaczającą ile liczb, rozdzielonych spacjami, będziemy mogli wpisać. Tę pojedyńczą liczbę wpisujemy w osobnym wierszu. Następnie poniżej wpisujemy liczby odzielone spacjami. Np.:

6
2 5 3 7 1 0

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    int tab[n];
    for (int i = 0; i > tab[i];
    }
    return 0;
}

Sterowanie strzałkami

#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
   char c;
   cout << "mozesz naciskac strzalki klawiatury np <- ; ESCAPE konczy program\n";
   do
   {
      c = _getch();
      switch (c)
      {
         case 72:
         {
            cout << "gora\n";
            break;
         }
         case 80:
         {
            cout << "dol\n";
            break;
         }
         case 75:
         {
            cout << "lewo\n";
            break;
         }
         case 77:
         {
            cout << "prawo\n";
            break;
         }
      }
   } while (c != 27);
   return 0;
}

Ukrycie kursora w konsoli

#include <iostream>
#include <windows.h>
using namespace std;

void HideCursor()
{
::HANDLE hConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
::CONSOLE_CURSOR_INFO hCCI;
::GetConsoleCursorInfo(hConsoleOut, &hCCI);
hCCI.bVisible = FALSE;
::SetConsoleCursorInfo(hConsoleOut, &hCCI);
}

int main()
{
HideCursor();
cout << "Hello World!";
system("pause>nul");
return 0;
}

Funkcja przywracająca kursor konsoli

#include <windows.h>

void ShowCursor()
{
::HANDLE hConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
::CONSOLE_CURSOR_INFO hCCI;
::GetConsoleCursorInfo(hConsoleOut, &hCCI);
if (hCCI.bVisible != TRUE)
{
hCCI.bVisible = TRUE;
::SetConsoleCursorInfo(hConsoleOut, &hCCI);
}
}

Odtwarzanie muzyki w programie konsolowym

Przygotuj plik dźwiękowy z rozszerzeniem wav. Wklej go do folderu projektu. Możesz też pobrać taki plik z tego linka.

Jeżeli programujesz w Code::Blocks to po utworzeniu projektu, kliknij na wstążce w Project -> Bulid options... -> Linker settings  i w sekcji Other linker options należy wkleić linijkę kodu: -lwinmm i kliknij przycisk ok.

Jeżeli programujesz w Visual Studio w polskiej wersji językowej to kliknij PPM nazwę swojego projektu -> Właściwości -> Konsolidator -> Dane wejściowe -> klikasz w przycisk rozwijany po prawej stronie od Dodatkowe czynności -> wybierasz <Edytuj...> i wklejasz winmm.lib -> klikasz ok.

Ścieżka angielskojęzyczna w Visual Studio:

Properties -> Linker -> Input -> Additional dependencies

#include <iostream>
#include <windows.h>
#include <mmsystem.h>

using namespace std;

int main()
{
   PlaySound(TEXT("name.wav"),NULL,SND_SYNC);
   return 0;
}

Go to X Y

Możemy wypisywać znak w dowolnym miejscu ekranu.
Oś XY zaczyna się w lewym górnym rogu ekranu.

#include <iostream>
#include <windows.h>


using namespace std;

void gotoxy(int x, int y)
{
    COORD coord;
    coord.X = x;
    coord.Y = y;

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

int main()
{

    gotoxy(10, 10);
    cout << "x";
    return 0;
}

Program pozwalający wpisywać 2 inty w jednym stringu ze spacją

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

int main()
{
string linia;
string slowo1;
string slowo2;
int nr=1;
int liczba1;
int liczba2;


getline( cin, linia );

for(int i=0; i <linia.length() ; i++)
{
if(linia[i]==' ')
{
nr = 2;
i++;
}

if(nr==1)
{
slowo1.push_back(linia[i]);

}

else
slowo2.push_back(linia[i]);
}

liczba1=atoi(slowo1.c_str());
liczba2=atoi(slowo2.c_str());
cout << liczba1 << endl;
cout << liczba2 << endl;


return 0;
}

Wypisanie alfabetu przy użyciu tablicy kodów ASCII

Link do tablicy kodów ASCII

#include <iostream>

using namespace std;

int main()
{
    for(int i = 65; i < 91; i++)
        cout << char(i) << "\n";

    return 0;
}

Poruszanie się po osi XY do przodu o wskazaną ilość kroków i obrót w prawo (zepsuty łazik marsjański)

#include <iostream>

int main() {

  int x=0;

  int y=0;

  int kierunek = 1;

  int ruch;

  int cel=0;

  do

  {

  std::cout << "Podaj ruch: ";

  std::cin >> ruch;

  if(kierunek==1)

  {

    y+=ruch;

    kierunek++;

  }

  else if(kierunek==2)

  {

    x+=ruch;

    kierunek++;

  }

  else if(kierunek==3)

  {

    y-=ruch;

    kierunek++;

  }

  else if(kierunek==4)

  {

    x-=ruch;

    kierunek=1;

  }

  if((x==3)&&(y==3))

  cel++;

  std::cout << "Znajdujesz sie na x: "<< x << "\n";

  std::cout << "Znajdujesz sie na y: "<< y << "\n";

  std::cout << "Cel osiagnieto: "<< cel << "\n";

  }while(true);

}

Program pozwalający poruszać się po osi XY i zostawiać za sobą ślad i niepozwalający wyjść poza planszę gry

#include "stdafx.h" // linijka doklejana automatycznie przez Visual Studio
#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>

using namespace std;

void gotoxy(int x, int y)
{
COORD coord;
coord.X = x;
coord.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void HideCursor()
{
::HANDLE hConsoleOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
::CONSOLE_CURSOR_INFO hCCI;
::GetConsoleCursorInfo(hConsoleOut, &hCCI);
hCCI.bVisible = FALSE;
::SetConsoleCursorInfo(hConsoleOut, &hCCI);
}
void ruch()
{
char c;
int x = 0;
int y = 0;
gotoxy(x, y);
cout << "\x02";
do
{
c = _getch();
switch (c)
{
case 72:
{

if (y > 0)
{
gotoxy(x, y);
cout << " ";
y--;
gotoxy(x, y);
cout << "\x02";
break;
}
else
break;

}
case 80:
{
if (y < 21)
{
gotoxy(x, y);
cout << " ";
y++;
gotoxy(x, y);
cout << "\x02";
break;
}
else
break;

}
case 75:
{
if (x > 0)
{
gotoxy(x, y);
cout << " ";
x--;
gotoxy(x, y);
cout << "\x02";
break;
}
else
break;

}
case 77:
{
if (x < 64)
{
gotoxy(x, y);
cout << " ";
x++;
gotoxy(x, y);
cout << "\x02";
break;
}
else
break;

}
}
} while (c != 27);

}

int main()
{
HANDLE hOut;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hOut, BACKGROUND_GREEN);
HideCursor();
for (int i = 0; i < 22; i++)
{
for (int i = 0; i< 65; i++)
cout << "\xB2";
cout << endl;
}
cout << endl;
SetConsoleTextAttribute(hOut, FOREGROUND_GREEN | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED);
ruch();
return 0;
}

Wątki

Wątki pozwalają wykonywać w programie dwie lub więcej czynności jednocześnie.

Metoda main nie może się skończyć. Jeżeli ona się wykona to pozostałe wątki przestaną działać.

#include "stdafx.h" // linijka doklejana automatycznie przez Visual Studio
#include <iostream>
#include <thread>
#include <windows.h>

using namespace std;
void function_1()
{
do {
cout << "1";
Sleep(1000);

} while (true); 
}
void function_2()
{
do {
cout << "2";
Sleep(500);

} while (true);
}

int main()
{
thread t1(function_1);
t1.detach();
thread t2(function_2);
t2.detach();
Sleep(10000000);
return 0;
}

Wskaźniki

#include <string>
using namespace std;

int main()
{
   int telefon = 12345; //zmienna liczbowa
   int *wsk = &telefon; //przypisanie wskaźnikowi adresu zmiennej telefon

   cout << *wsk << endl; //wyświetlenie wyłuskanej wartości wskaźnika (12345)
   cout << wsk << endl; //wyświetlenie adresu zmiennej telefon
   cout << &wsk << endl; //wyświetlenie adresu wskaźnika
   cout << &telefon << endl; //wyświetlenie adresu zmiennej telefon
}

Tablica alokowana dynamicznie, dzięki wskaźnikowi

Pamiętaj, że taka tablica musi być na końcu zniszczona.

#include "stdafx.h"
#include <iostream>
#include<Windows.h>

using namespace std;

int main()
{

int n;
int *tablica;
cin >> n;
tablica = new int[n];
for (int i = 0; i < n; i++)
{
   cin >> tablica[i];
}
for (int i = 0; i < n; i++)
{
   cout << tablica[i] << " ";
}
delete[] tablica;

system("pause");
return 0;
}

Liczba PI - użycie biblioteki cmath w Code Blocks

W mojej wersji Code Blocks pojawiał się błąd: M_PI was nor declared in this scope. Rozwiązaniem okazało się dodanie na początek lini kodu: #undef __STRICT_ANSI__

#undef __STRICT_ANSI__
#include <cmath>
#include <iostream>

using namespace std;

int main() {
  cout << M_PI;
  return 0;
}

Wektor

Ta kwestia jest dobrze wytłumaczona na tej stronie:

http://cpp0x.pl/kursy/Kurs-STL-C++/Kontener-tablicy-std-vector/119

Specyfikacja techniczna biblioteki vector

Sumowanie wszystkich wartości elementów wektora

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    vector v = {1, 2, 3};
    cout << accumulate(v.begin(), v.end(), 0);
    return 0;
}

0 - wartość początkową do której będziemy dodawali każdy element z wektora v.

Pierszy i ostatni element wektora

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector v = {23, 43, 2, 45,1};

    cout << "Pierwszy element: " << v[0] << endl;
    cout << "Ostatni element: " << v.back() << endl;
    return 0;
}

Sortowanie wektora od najmniejszej do największej wartości

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector v = {23, 43, 2, 45,1};
    sort(v.begin(), v.end());
    return 0;
}

Wyznaczenie wartości maksymalnej i minimalnej wektora przy użyciu wskaźnika

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    int n;
    vector v={33, 543, 234, 212, 5};
    int max_v = *max_element(v.begin(), v.end());
    int min_v = *min_element(v.begin(), v.end());
    cout << min_v << "\n";
    cout << max_v;

    return 0;
}

Sorting a vector of structs - Sortowanie wektora struktury

Struktury dobrze nadają się do tworzenia baz danych. Np. Imię i Nazwisko, telefon, wiek.

Poniżej przedstawiam rozwiązanie zadania Zwycięzcy ze strony Szkopuł.

Link do treści zadania

Kod do rozwiązania zadania i wyjaśnienia umieszczam pod linkiem.
Jest to spowodowane tym, że mój wordpress gryzie się z tym kodem.

Wypisywanie liczb pierwszych z użyciem sita Eratostenesa i wektora

Input:

Ilość testów

Liczba początkowa i końcowa

#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
int m, n, ile, m1;
vector <int> zle;
zle.push_back(1);
cin >> ile;

for (int j = 0; j < ile; j++)
{
cin >> m >> n;
//do tablicy zle wpisuje wszystkie liczby złożone
m1 = 1;
while (m1 <= n)
{
//znaleziono liczbe wiec nie jest ona l. pierwszą
if (find(zle.begin(), zle.end(), m1) != zle.end())
{
m1++;
}
//uruchamia się jeżeli nie znaleziono
else
{
//cout << m1 << endl;
for (int k = m1 * m1; k <= n; k += m1)
// jezeli znaleziono k w vectorze to nie zapisuj i wywołaj nastepną petlę
if (find(zle.begin(), zle.end(), k) != zle.end())
continue;
else
zle.push_back(k);
m1++;
}
}
// wypisanie liczb pierwszych
for (int p = m; p <= n; p++)
{
// jeżeli nie znaleziono w vektorze to jest ona pierwsza i bedzie wypisana
if (find(zle.begin(), zle.end(), p) == zle.end())
cout << p << endl;
}
cout << endl;
}

system("pause");
return 0;
}

Program do rysowania

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

using namespace std;

void gotoxy(int x, int y)
{
    COORD coord;
    coord.X = x;
    coord.Y = y;

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

int main()
{
    int x=0;
    int y=0;
    char a;
    while(a=_getch())
    {
        switch (a)
        {
            case 72:
            {
                y--;
                break;
            }
            case 80:
            {
                y++;
                break;
            }
            case 75:
            {
                x--;
                break;
            }
            case 77:
            {
                x++;
                break;
            }
        }
        gotoxy(x, y);
        cout<<"o";
    }
    return 0;
}

Zamknięcie systemu Windows i wyłączenie komputera

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
   system("C:\\WINDOWS\\System32\\shutdown /s");
 
   return 0;
}

Otworzenie strony www w domyślnej przeglądarce

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    ShellExecute(NULL, "open", "rundll32.exe", "url.dll,FileProtocolHandler http://www.google.com",NULL,SW_SHOWNORMAL);
    return 0;
}

Ukrycie i ponowne uwidocznienie okna konsoli - console aplication

#include <iostream>
#include <windows.h>

using namespace std;

void Stealth(int x)
{
 HWND Stealth;
 AllocConsole();
 Stealth = FindWindowA("ConsoleWindowClass", NULL);
 ShowWindow(Stealth,x);
}

int main()
{
    cout << "Za 1 sekundę okno zostanie ukryte" << endl;
    Sleep(1000);
    Stealth(0);
    Sleep(1000);
    cout << "Za 1 sekundę okno zostanie odkryte" << endl;
    Sleep(1000);
    Stealth(1);    
    return 0;
}

Ukrycie okna przeglądarki internetowej IE

#include <iostream>
#include <windows.h>

using namespace std;

void Stealth(int x)
{
 HWND Stealth;
 AllocConsole();
 Stealth = FindWindowA("IEFrame", NULL);
 ShowWindow(Stealth,x);
}

int main()
{
    Stealth(0);    
    return 0;
}

Uruchomienie dowolnego programu exe

#include <windows.h>

int main ()

{
    system ("start notepad.exe"); 

    return 0 ;
}

Program sprawdzający, która przeglądarka jest uruchomiona

#include <iostream>
#include <windows.h>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector names{"MozillaWindowClass", "IEFrame", "Chrome_WidgetWin_1"};

    for (auto const &name : names) {
        if (NULL != FindWindow(name.c_str(), NULL)) {
            cout << name.c_str() << " - Uruchomiony\n";
        }
        else
            cout << name.c_str()<< " - Nie uruchomiony\n";
    }
    return 0;
}

Otwarcie strony w domyślnej przeglądarce a potem ukrycie okna przeglądarki

#include <iostream>
#include <windows.h>
void Stealth(int x);
using namespace std;

int main()
{
    ShellExecute(NULL, "open", "rundll32.exe", "url.dll,FileProtocolHandler https://www.kursyexcela.pl",NULL,SW_SHOWNORMAL);
    Sleep(1000);
    Stealth(0);
    return 0;
}
void Stealth(int x)
{
 HWND Stealth = GetForegroundWindow();
 ShowWindow(Stealth,0);
}