C++ odczytywanie/zmienianie wartości w obiektach

C++ odczytywanie/zmienianie wartości w obiektach
AR
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:26
0

Witam, programuje właśnie grę w konsoli, chciałem wstępnie ją skompilować no i wyskoczyła lista takich samych błędów:
"
cpp:195:23: error: ‘class pionek’ has no member named ‘kolor’
else if(tab[i][k].kolor==BIALY)
^
"

Błędy są z następującego pliku:

Kopiuj
#include<iostream>
#include<string>
#include<cstdlib>
#include"warcaby.hpp"
#define CZARNY 1
#define BIALY 2
#define BRAK 0
#define PIONEK 1
#define DAMKA 2
using namespace std;

pionek::pionek ()
	{
	int typ=PIONEK;
	int kolor=BRAK;
	bool blokada=false; // czy dany pionek moze sie ruszac
	bool walecznosc=false; // czy dany pionek ma bicie w danej turze
	}
	
plansza::plansza()
	{
	int liczba_czarnych=12;
	int liczba_bialych=12;
	tab = new pionek*[8];
	for(int i=0;i<8;i=i+1)
		{
    		tab[i] = new pionek[8];
    		}
	}
		
void plansza::przemiesc_pionka(int x1, int y1, int x2, int y2) //z 1 na 2  
	{
	tab[x2][y2]->typ=tab[x1][y1]->typ;
	tab[x2][y2]->kolor=tab[x1][y1]->kolor;
	tab[x2][y2]->typ=BRAK;
	tab[x2][y2]->kolor=BRAK;
	}
	
void plansza::usuwanie_pionka(int x,int y)
	{
	tab[x][y]->typ=BRAK;
	tab[x][y]->kolor=BRAK;
	tab[x][y]->blokada=false;
	tab[x][y]->walczenosc=false;
	}
void plansza::ruchliwosc(int x,int y, int czarnybialy)
	{
	if((tab[x][y]->typ==PIONEK) && (tab[x][y]->kolor==czarnybialy))
		{
			if(tab[x][y]->kolor==BIALY)
				{
				if((y<7)&&(y>=0)&&(x<7)&&(x>0)&&((tab[x-1][y+1]->typ==BRAK)||(tab[x+1][y+1]->typ==BRAK)))
					{
					tab[x][y]->blokada=false;	
					}
				else if ((y<7)&&(y>=0)&&(x==0)&&(tab[x+1][y+1]->typ==BRAK))
					{
					tab[x][y]->blokada=false;
					}
				else if ((y<7)&&(y>=0)&&(x==7)&&(tab[x-1][y+1]->typ==BRAK))
					{
					tab[x][y]->blokada=false;
					}
				else
					{
					tab[x][y]->blokada=true;
					}
				}
			else
				{
				if((y<=7)&&(y>0)&&(x<7)&&(x>0)&&((tab[x-1][y-1]->typ==BRAK)||(tab[x+1][y-1]->typ==BRAK)))
					{
					tab[x][y]->blokada=false;	
					}
				else if ((y<=7)&&(y>0)&&(x==0)&&(tab[x+1][y-1]->typ==BRAK))
					{
					tab[x][y]->blokada=false;
					}
				else if ((y<=7)&&(y>0)&&(x==7)&&(tab[x-1][y-1]->typ==BRAK))
					{
					tab[x][y]->blokada=false;
					}
				else
					{
					tab[x][y]->blokada=true;
					}
				}
		}
	else
		{
		if((tab[x][y]->typ==DAMKA) && (tab[x][y]->kolor==czarnybialy))
			{}
		else
			{
			tab[x][y]->blokada=true;
			}
		}
	}
	
void plansza::bitewnosc(int x,int y, int czarnybialy)
	{
	if((tab[x][y]->typ==PIONEK) && (tab[x][y]->kolor==czarnybialy))
		{
		if((x>=2)&&(y<=5)&&(tab[x-1][y+1]->typ!=BRAK)&&(tab[x-1][y+1]->kolor!=czarnybialy)&&(tab[x-2][y+2]->typ==BRAK))
			{
			tab[x][y]->walecznosc=true;
			return;
			}
		if((x>=2)&&(y>=2)&&(tab[x-1][y-1]->typ!=BRAK)&&(tab[x-1][y-1]->kolor!=czarnybialy)&&(tab[x-2][y-2]->typ==BRAK))
			{
			tab[x][y]->walecznosc=true;
			return;
			}
		if((x<=5)&&(y>=2)&&(tab[x+1][y-1]->typ!=BRAK)&&(tab[x+1][y-1]->kolor!=czarnybialy)&&(tab[x+2][y-2]->typ==BRAK))
			{
			tab[x][y]->walecznosc=true;
			return;
			}
		if((x<=5)&&(y<=5)&&(tab[x+1][y+1]->typ!=BRAK)&&(tab[x+1][y+1]->kolor!=czarnybialy)&&(tab[x+2][y+2]->typ==BRAK))
			{
			tab[x][y]->walecznosc=true;
			return;
			}
		tab[x][y]->walecznosc=false;
			
		}
	else if((tab[x][y]->typ==DAMKA) && (tab[x][y]->kolor==czarnybialy))//damka
		{
		
		}
	}
	
void plansza::ustawianie_pionkow()
	{
	for(i=0;i<8;i=i+2)
		{
		tab[0][i]->typ=PIONEK;
		tab[1][i+1]->typ=PIONEK;
		tab[2][i]->typ=PIONEK;
		tab[5][i+1]->typ=PIONEK;
		tab[6][i]->typ=PIONEK;
		tab[7][i+1]->typ=PIONEK;
		
		tab[0][i]->kolor=BIALY;
		tab[1][i+1]->kolor=BIALY;
		tab[2][i]->kolor=BIALY;
		tab[5][i+1]->kolor=BIALY;
		tab[6][i]->kolor=BIALY;
		tab[7][i+1]->kolor=BIALY;
		}
	}
void plansza::drukowanie(int czarnybialy)
	{
	int i;
	int k;
	if(czarnybialy==BIALY)
		{
		for(i=0;i<8;i=i+1)
			{
			cout << 8-i << " ";
			for(k=0;k<8;k=k+1)
				{
				cout << "[";
				if(tab[i][k]->kolor==BRAK)
					{
					cout << " ";
					}
				else if(tab[i][k]->kolor==BIALY)
					{
					cout << "B";
					}
				else
					{
					cout << "C";
					}
				cout << "]";
				}
			cout << endl;
			}
			cout << "   A  B  C  D  E  F  G  H";
		}
	else
		
		{
		for(i=7;i>=0;i=i-1)
			{
			cout << 8-i << " ";
			for(k=7;k>=0;k=k-1)
				{
				cout << "[";
				if(tab[i][k]->kolor==BRAK)
					{
					cout << " ";
					}
				else if(tab[i][k]->kolor==BIALY)
					{
					cout << "B";
					}
				else
					{
					cout << "C";
					}
				cout << "]"
				}
			cout << endl;
			}
			cout << "   H  G  F  E  D  C  B  A"<< endl;
		}
	}		
		
bool plansza::czy_jest_bicieruch(int czarnybialy)//sprawdza czy któryś pionek ma bicie + ustawia blokady ruchu na pionki
	{
	int i;
	int k;
	int sprawdzenie=0;
	for(i=0;i<8;i=i+1)
		{
		for(k=0;k<8;k=k+1)
			{
			ruchliwosc(i,y,czarnybialy);
			bitewnosc(i,y,czarnybialy);
			}
		}
	if(sprawdzenie!=0)
		{
		return true;
		}
	else
		{
		return false;
		}
	}
	
plansza::~plansza()
	{
	for(int i=0;i<8;i=i+1)
		{
		for(int k=0;k<8;k=k+1)
			{
			delete pionek tab[i][k];
			}
		}
	}
 

Jakaś porada ?
Dzięki z góry za pomoc!

Zobacz pozostałe 3 komentarze
pylaochos
Kwestia gustu, ale mało które IDE standardowo wspiera taki układ i często trzeba ręcznie robić wcięcia - ja wole, żeby robione były na automacie. Jak patrzę na ten kod to trochę kłuje w oczy, wydaje mi się, że większość ludzi to samo powie, a szkopuł w tym, że warto żeby inni też nie mieli problemu z czytaniem ;)
AR
Mój notatnik wspiera moje wybryki :P
twonek
Gust gustem, ale warto się przyzwyczaić do jednego ze standardowych układów, bo potem będzie masakra w pracy. No chyba że planujesz programować tylko dla siebie w zaciszu domowym i nie pokazywać tego nikomu.
spartanPAGE
@twonek ostatnia część zdania odpada, skoro powstał ten wątek ;)
twonek
Też przyszło mi to do głowy :P
stryku
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:607
2

Pierwsza porada: formatuj kod
Druga: podziel go odpowiednio na pliki
Trzecia:

Kopiuj
pionek::pionek ()
    {
    int typ=PIONEK;
    int kolor=BRAK;
    bool blokada=false; // czy dany pionek moze sie ruszac
    bool walecznosc=false; // czy dany pionek ma bicie w danej turze
    } 

Takie coś stworzy Ci zmienne typ, kolor itd.. tylko na chwilę w konstruktorze pionka. Pokaż deklarację klasy/struktury pionek

twonek
w tej samej sekundzie :D
twonek
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
2
Kopiuj
pionek::pionek ()
{
    int typ=PIONEK;
    int kolor=BRAK;
    bool blokada=false; // czy dany pionek moze sie ruszac
    bool walecznosc=false; // czy dany pionek ma bicie w danej turze
}

Tworzysz tutaj 4 tymczasowe zmienne, które znikną po wyjściu z konstruktora. Jeśli chcesz mieć zmienną w klasie, to musisz tam dodać np.

Kopiuj
class pionek
{
    ...
    int kolor;
};

pionek::pionek()
{
    ...
    kolor = BRAK;         // zauwaz, ze nie ma "int" przed kolor, bo nie deklarujesz nowej zmiennej
}
stryku
"0 sekund temu" dziadu :d
AR
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:26
0

Dzięki za pomoc, biorę się za poprawianie! A pliki mam podzielone, osobno mam plik testowy, i osobno z klasami.
EDIT: Chyba, że chodzi o jakieś szersze rozdzielanie ?

edytowany 1x, ostatnio: Armatorix
stryku
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad rok
  • Postów:607
0

Wg mnie definicje klas pionek i plansza powinny być w innych plikach. Tutaj masz konstruktor pionka

Z takich porad jeszcze to zamieniłbym #definy na jakiegoś enuma ;)

AR
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:26
0

Poprawiłem poprzednie błędy, ale problem pozostał ten sam...
Wyśle obydwa pliki:

Kopiuj
#include<iostream>
#include<string>
#include<cstdlib>
#include"warcaby.hpp"
#define CZARNY 1
#define BIALY 2
#define BRAK 0
#define PIONEK 1
#define DAMKA 2
using namespace std;

pionek::pionek ()
	{
	typ=PIONEK;
	kolor=BRAK;
	blokada=false; // czy dany pionek moze sie ruszac
	walecznosc=false; // czy dany pionek ma bicie w danej turze
	}
	
plansza::plansza()
	{
	liczba_czarnych=12;
	liczba_bialych=12;
	tab = new pionek*[8];
	for(int i=0;i<8;i=i+1)
		{
    		tab[i] = new pionek[8];
    		}
	}
		
void plansza::przemiesc_pionka(int x1, int y1, int x2, int y2) //z 1 na 2  
	{
	tab[x2][y2]->typ=tab[x1][y1]->typ;
	tab[x2][y2]->kolor=tab[x1][y1]->kolor;
	tab[x2][y2]->typ=BRAK;
	tab[x2][y2]->kolor=BRAK;
	}
	
void plansza::usuwanie_pionka(int x,int y)
	{
	tab[x][y]->typ=BRAK;
	tab[x][y]->kolor=BRAK;
	tab[x][y]->blokada=false;
	tab[x][y]->walczenosc=false;
	}
void plansza::ruchliwosc(int x,int y, int czarnybialy)
	{
	if((tab[x][y]->typ==PIONEK) && (tab[x][y]->kolor==czarnybialy))
		{
			if(tab[x][y]->kolor==BIALY)
				{
				if((y<7)&&(y>=0)&&(x<7)&&(x>0)&&((tab[x-1][y+1]->typ==BRAK)||(tab[x+1][y+1]->typ==BRAK)))
					{
					tab[x][y]->blokada=false;	
					}
				else if ((y<7)&&(y>=0)&&(x==0)&&(tab[x+1][y+1]->typ==BRAK))
					{
					tab[x][y]->blokada=false;
					}
				else if ((y<7)&&(y>=0)&&(x==7)&&(tab[x-1][y+1]->typ==BRAK))
					{
					tab[x][y]->blokada=false;
					}
				else
					{
					tab[x][y]->blokada=true;
					}
				}
			else
				{
				if((y<=7)&&(y>0)&&(x<7)&&(x>0)&&((tab[x-1][y-1]->typ==BRAK)||(tab[x+1][y-1]->typ==BRAK)))
					{
					tab[x][y]->blokada=false;	
					}
				else if ((y<=7)&&(y>0)&&(x==0)&&(tab[x+1][y-1]->typ==BRAK))
					{
					tab[x][y]->blokada=false;
					}
				else if ((y<=7)&&(y>0)&&(x==7)&&(tab[x-1][y-1]->typ==BRAK))
					{
					tab[x][y]->blokada=false;
					}
				else
					{
					tab[x][y]->blokada=true;
					}
				}
		}
	else
		{
		if((tab[x][y]->typ==DAMKA) && (tab[x][y]->kolor==czarnybialy))
			{}
		else
			{
			tab[x][y]->blokada=true;
			}
		}
	}
	
void plansza::bitewnosc(int x,int y, int czarnybialy)
	{
	if((tab[x][y]->typ==PIONEK) && (tab[x][y]->kolor==czarnybialy))
		{
		if((x>=2)&&(y<=5)&&(tab[x-1][y+1]->typ!=BRAK)&&(tab[x-1][y+1]->kolor!=czarnybialy)&&(tab[x-2][y+2]->typ==BRAK))
			{
			tab[x][y]->walecznosc=true;
			return;
			}
		if((x>=2)&&(y>=2)&&(tab[x-1][y-1]->typ!=BRAK)&&(tab[x-1][y-1]->kolor!=czarnybialy)&&(tab[x-2][y-2]->typ==BRAK))
			{
			tab[x][y]->walecznosc=true;
			return;
			}
		if((x<=5)&&(y>=2)&&(tab[x+1][y-1]->typ!=BRAK)&&(tab[x+1][y-1]->kolor!=czarnybialy)&&(tab[x+2][y-2]->typ==BRAK))
			{
			tab[x][y]->walecznosc=true;
			return;
			}
		if((x<=5)&&(y<=5)&&(tab[x+1][y+1]->typ!=BRAK)&&(tab[x+1][y+1]->kolor!=czarnybialy)&&(tab[x+2][y+2]->typ==BRAK))
			{
			tab[x][y]->walecznosc=true;
			return;
			}
		tab[x][y]->walecznosc=false;
			
		}
	else if((tab[x][y]->typ==DAMKA) && (tab[x][y]->kolor==czarnybialy))//damka
		{
		
		}
	}
	
void plansza::ustawianie_pionkow()
	{
	for(int i=0;i<8;i=i+2)
		{
		tab[0][i]->typ=PIONEK;
		tab[1][i+1]->typ=PIONEK;
		tab[2][i]->typ=PIONEK;
		tab[5][i+1]->typ=PIONEK;
		tab[6][i]->typ=PIONEK;
		tab[7][i+1]->typ=PIONEK;
		
		tab[0][i]->kolor=BIALY;
		tab[1][i+1]->kolor=BIALY;
		tab[2][i]->kolor=BIALY;
		tab[5][i+1]->kolor=BIALY;
		tab[6][i]->kolor=BIALY;
		tab[7][i+1]->kolor=BIALY;
		}
	}
void plansza::drukowanie(int czarnybialy)
	{
	int i;
	int k;
	if(czarnybialy==BIALY)
		{
		for(i=0;i<8;i=i+1)
			{
			cout << 8-i << " ";
			for(k=0;k<8;k=k+1)
				{
				cout << "[";
				if(tab[i][k]->kolor==BRAK)
					{
					cout << " ";
					}
				else if(tab[i][k]->kolor==BIALY)
					{
					cout << "B";
					}
				else
					{
					cout << "C";
					}
				cout << "]";
				}
			cout << endl;
			}
			cout << "   A  B  C  D  E  F  G  H";
		}
	else
		
		{
		for(i=7;i>=0;i=i-1)
			{
			cout << 8-i << " ";
			for(k=7;k>=0;k=k-1)
				{
				cout << "[";
				if(tab[i][k]->kolor==BRAK)
					{
					cout << " ";
					}
				else if(tab[i][k]->kolor==BIALY)
					{
					cout << "B";
					}
				else
					{
					cout << "C";
					}
				cout << "]"
				}
			cout << endl;
			}
			cout << "   H  G  F  E  D  C  B  A"<< endl;
		}
	}		
		
bool plansza::czy_jest_bicieruch(int czarnybialy)//sprawdza czy któryś pionek ma bicie + ustawia blokady ruchu na pionki
	{
	int i;
	int k;
	int sprawdzenie=0;
	for(i=0;i<8;i=i+1)
		{
		for(k=0;k<8;k=k+1)
			{
			ruchliwosc(i,k,czarnybialy);
			bitewnosc(i,k,czarnybialy);
			}
		}
	if(sprawdzenie!=0)
		{
		return true;
		}
	else
		{
		return false;
		}
	}
	
plansza::~plansza()
	{
	for(int i=0;i<8;i=i+1)
		{
		for(int k=0;k<8;k=k+1)
			{
			delete pionek tab[i][k];
			}
		}
	} 
Kopiuj
#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;




class pionek
	{
	public:	
		pionek();
		int typ;
		int kolor;
		bool blokada; // czy dany pionek moze sie ruszac
		bool walecznosc;

	};

class plansza
	{
	private:
		pionek** tab;
	public:
		plansza();	
		int liczba_czarnych;
		int liczba_bialych;
		void przemiesc_pionka(int x1, int y1, int x2, int y2);
		void usuwanie_pionka(int x,int y);
		void ruchliwosc(int x,int y,int czarnybialy);
		void bitewnosc(int x,int y, int czarnybialy);
		void ustawianie_pionkow();
		void drukowanie(int czarnybialy);
		bool czy_jest_bicieruch(int czarnybialy);
		~plansza();
	}; 
AR
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:26
0
stryku napisał(a):

Wg mnie definicje klas pionek i plansza powinny być w innych plikach. Tutaj masz konstruktor pionka

Z takich porad jeszcze to zamieniłbym #definy na jakiegoś enuma ;)

Enum jest chyba tylko estetyczniejszy, czy działa też lepiej ?

spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 12 godzin
1

jest lepszy pod każdym możliwym względem, czyli jak zawsze w przypadku kompilacji - pod względem uniwersalności, bezpieczeństwa i "nie fakapowania istniejącego kodu"

twonek
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
1
Armatorix napisał(a):

Poprawiłem poprzednie błędy, ale problem pozostał ten sam...
Co to znaczy ten sam? Jaki jest komunikat błędu, której linii dotyczy?

Kopiuj
tab[x2][y2]->typ=tab[x1][y1]->typ;
....
pionek** tab;

tak na oko to powinno być tab[x1][y1].typ

I weź przepuść ten kod przez formater: http://format.krzaq.cc, bo tego oglądać się nie da.

AR
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:26
0

Kropka załatwiła sprawe... dzięki!
Tylko czemu używać kropki a nie -> ? W przypadku innego programu w cpp stosowałem właśnie -> a w javie kropke.
(zaznaczam że nie jestem wytrawnym programistą, proszę o wyrozumiałość ;) )

twonek
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 2 lata
  • Postów:2500
1

Kropka przy obiekcie, strzałka przy wskaźniku.
tab[x2][y] to obiekt typu pionek, a nie wskaźnik do obiektu typu pionek.

edytowany 1x, ostatnio: twonek
NI
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:535
1

. jest do klas i struktur , natomiast -> spotkałem tylko gdy operowałem na wskaźniku na klasę lub strukturę... taka drobna różnica


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
KR
Do klas i struktur jest operator "::". Do obiektow danych klas i struktur jest ".". Do wskaznikow na obiekty jest "->".
NI
to warto wiedzieć ;)
AR
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:26
0

Dzięki, nawet pisze w kompilatorze. Dobrze, że nikt za głupotę nie karze xd

A wiecie może co nie tak jest z destruktorem ?

cpp:240:18: error: expected primary-expression before ‘tab’
delete pionek tab[i][k];
^
cpp:240:18: error: expected ‘;’ before ‘tab’

KR
  • Rejestracja:prawie 16 lat
  • Ostatnio:5 miesięcy
  • Postów:2514
1
Armatorix napisał(a):

Dzięki, nawet pisze w kompilatorze. Dobrze, że nikt za głupotę nie karze xd

A wiecie może co nie tak jest z destruktorem ?

cpp:240:18: error: expected primary-expression before ‘tab’
delete pionek tab[i][k];
^
cpp:240:18: error: expected ‘;’ before ‘tab’

Tak wiemy - nie ma sensu. Zastanow sie co probujesz zwolnic. Jesli jest to pamiec na pojedynczy obiekt to robisz to tak:

Kopiuj
delete wskaznik_na_obiekt;

jesli cala tablica obiektow to tak:

Kopiuj
delete [] wskaznik_na_pierwszy_obiekt_w_tablicy;

Jesli tablica wskaznikow na obiekty to najpierw zwalniasz kazdy element z osobna a potem pamiec na tablice wskaznikow.


░█░█░█░█░█░█░█░█░█░█░█░
NI
szybko piszesz :)
KR
Raczej duzo :P
NI
  • Rejestracja:około 11 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:535
1

no delete nie chce typu tylko wskaźnik...


Programuje i programuje ,przychodzi człowiek "o niższej inteligencji" i rok pracy zmarnowany
AR
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:26
0

Dzięki wielkie! Chwilowo wszystko śmiga :D

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)