Drobna pomoc w macierzach

Drobna pomoc w macierzach
S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

Witam mam mały problem z moim programem ale najpierw przedstawię to co miałem zrobić:
Napisać program który zawiera w paru funkcjach następujące rzeczy:

  • wprowadzanie rozmiaru macierzy kwadratowej ( żeby N=M ); [u mnie w głównym programie]
  • randomowe wypisanie tablicy do tablicy wskaznikowej (z dynamiczna alokacja danych, ale moze być też bez); [w funkcji macierz]
  • wypisanie tablicy na ekran; [w funkcji wypisanie]
  • policzenie sumy liczb z: a> przekątnej macierzy, b> sumy nad przekątna, c> sumy pod przekątna [w funkcji sumowanie]

a tutaj mój program

Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int macierz(int**);
int wypisanie(int**);
int sumowanie();

int N, M;
int **tab;
int i, j;
int skos, nad, pod;

int main ()
{
    printf("\n Podaj liczbe kolumn oraz wierszy swojej macierzy KWADRATOWEJ: ");
    scanf("%d", &N);
    M=N;

    macierz();
    wypisanie();
    sumowanie();

    for(i=0; i<M; i++)      // CZYSZCZENIE TABLICY przez funkcje free
    free(tab[i]);
    free(tab);
system("pause");
return 0;
}


int macierz(int**)
{

    tab=(int**)malloc(N*sizeof(int *));     // ODWOLANIE DO WSKAZNIKOW PRZEZ malloc
    for(i=0; i<M; i++)
    {
        tab[i]=(int*)malloc(M*sizeof(int));
    }

    srand((unsigned int) time(NULL));
        for (i=0; i<N; i++)
            for (j=0; j<M; j++)
                tab[i][j] = rand() % 10; // dzielone przez dziesiec lczby calkowite do 10

}

int wypisanie(int**)
{
        for(i=0;i<N;i++)
    {
        for(j=0; j<M; j++)
        {
            printf("%3d ", tab[i][j]);
        }
        printf("\n");
    }

}

int sumowanie()
{
        skos = nad = pod = 0;

        for (i=0; i<N; i++){
        for (j=0; j<M; j++)
        {
            if (i<j) nad+=tab[i][j];
            if (i==j) skos+=tab[i][j];
            if (i>j) pod+=tab[i][j];
        }
        }

        printf("a)\tSuma liczb macierzy nad przekatna jest rowna: %d\n",nad); 
        printf("b)\tSuma liczb macierzy na przekatnej jest rowna: %d\n",skos);
        printf("c)\tSuma liczb macierzy pod przekatna jest rowna: %d\n",pod); 

} 
edytowany 4x, ostatnio: siti02
Silv
A jaki jest ten problem? Chodzi o ogólne sprawdzenie poprawności programu?
NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
0

A jaki jest problem i co oznacza (int**) ?

S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

Problem w tym ze zapomnialem jak wczytac poprawnie funkcję w programie, a wydaje mi się że (int**) tworzy wskaznik tablicy ale niejestem pewien

Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
0

@siti02, co rozumiesz przez "wczytać" funkcję? Wywołać?

@notexists, z tego, co wiem, zapis int** jest dozwolony, ale nie znam wszystkich reguł, dlatego się nie wypowiem (lepiej wygooglować, niż słuchać mnie w tym zakresie ;) ).


edytowany 1x, ostatnio: Silv
NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
0

Od dawna nie używałem C++, więc mogę się mylić, ale chyba (int**) nie ma sensu. W nawiasie wpisujemy argumenty funkcji, czyli co najmniej typ i nazwa zmiennej, pod którą ten argument będzie widoczny w tej funkcji. Sugeruję usunąć...

Patrząc na kod z góry w dół, jeżeli jakaś funkcja jest wywoływana w danym miejscu, to musi ona być już znana, czyli
a) zdefiniowana wcześniej: umieść funkcję main jako ostatnią funkcję w swoim programie
lub
b) zadeklarowana wcześniej: nad funkcją main dodaj deklaracje funkcji, których używasz, czyli np. int sumowanie();.

Silv
Zauważę, że C, nie C++. Ale dobrze mówisz, w definicji funkcji na dole dodać nazwę parametru, a w deklaracji (zapowiedzi) na samej górze nie usuwać int**!
szarotka
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 2 miesiące
  • Postów:533
2

int macierz(int**)
funkcja ani nie zwraca żadnej wartości ani nie przyjmuje argumentu - brak nazwy.
Pewnie chciałeś zwracać wskaźnik do tablicy, a przyjmować jako argument wielkość tablicy??

S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

@Michał tak wywołać

@notexists udało się gdy wstawiłem main na koniec i usunełem (int**) to program działa poprwanie

Ale moje pytanie bo już dawnozapomniałem czy w tej postaci mój program uzywa wskazników ?

poprawiony kod

Kopiuj
 #include <stdio.h>
#include <stdlib.h>
#include <time.h>

int macierz();
int wypisanie();
int sumowanie();

int N, M;
int **tab;
int i, j;
int skos, nad, pod;

int macierz()
{

    tab=(int**)malloc(N*sizeof(int *));     // ODWOLANIE DO WSKAZNIKOW PRZEZ malloc
    for(i=0; i<M; i++)
    {
        tab[i]=(int*)malloc(M*sizeof(int));
    }

    srand((unsigned int) time(NULL));
        for (i=0; i<N; i++)
            for (j=0; j<M; j++)
                tab[i][j] = rand() % 10; // dzielone przez dziesiec lczby calkowite do 10

}

int wypisanie()
{
        for(i=0;i<N;i++)
    {
        for(j=0; j<M; j++)
        {
            printf("%3d ", tab[i][j]);
        }
        printf("\n");
    }

}

int sumowanie()
{
        skos = nad = pod = 0;

        for (i=0; i<N; i++){
        for (j=0; j<M; j++)
        {
            if (i<j) nad+=tab[i][j];
            if (i==j) skos+=tab[i][j];
            if (i>j) pod+=tab[i][j];
        }
        }

        printf("a)\tSuma liczb macierzy nad przekatna jest rowna: %d\n",nad);  // w 1 funkcji
        printf("b)\tSuma liczb macierzy na przekatnej jest rowna: %d\n",skos);  // w 2 funkcji
        printf("c)\tSuma liczb macierzy pod przekatna jest rowna: %d\n",pod);  // w 3 funkcjis

}

int main ()
{
    printf("\n Podaj liczbe kolumn oraz wierszy swojej macierzy KWADRATOWEJ: ");
    scanf("%d", &N);
    M=N;

    macierz();
    wypisanie();
    sumowanie();

    for(i=0; i<M; i++)      // CZYSZCZENIE TABLICY przez funkcje free
    free(tab[i]);
    free(tab);
system("pause");
return 0;
}
S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

@właśnie o to mi właśnie chodziło

S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

czyli reasumując program działa poprawne ale jedno pytanie czy tablica jest tworzona za pomocą wskaznika?

pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:25 dni
  • Lokalizacja:Kraków
  • Postów:1055
1
  1. int ** to wskaźnik na wskaźnik, może być interpretowany jako tablica dwuwymiarowa, choć są lepsze sposoby.
  2. tak, Twój program używa wskaźników.
  3. alokacja pamięci i jej zwalnianie jest technicznie rzecz biorąc okej.
  4. dlaczego mówisz kompilatorowi, że Twoje funkcje zwracają int, skoro nic nie zwracają?
  5. zmienne globalne są złe. Bardzo złe.
  6. formatuj to jako tako, bo trochę kupa Ci z kodu wyszła.

do not code, write prose
edytowany 1x, ostatnio: pingwindyktator
S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

@pingwindyktator 1. co do kodu wiem ze nie jest zbytnio fajny ale moj wykladowca poswiecil glowna uwage na zajeciach na wskazniki i musialem gdzies je wykorzystac niestety.. -.-
2. dobrze usuwam wiec przed funkcjami int-y tzn wszedzie przed: macierz(); wypisanie(); sumowanie();
3. wiec jak teraz ogarnac zmiene globalne by byly dostatecznie dobre :)?

edytowany 1x, ostatnio: siti02
Silv
@siti02, ze zmiennymi globalnymi @pingwindyktator -owi chodzi o to, że powinieneś używać parametrów w funkcjach.
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:25 dni
  • Lokalizacja:Kraków
  • Postów:1055
0

Wskaźniki w C są jak najbardziej okej. Nigdy nie mówiłem, że nie.
"2. dobrze usuwam wiec przed funkcjami int-y tzn wszedzie przed: macierz(); wypisanie(); sumowanie();"
Nie rozumem Cię ani trochę.
Zmienne globalne prawie nigdy nie będą dobre. Powinno ich w ogóle nie być. Jak piszesz program wielowątkowy z jakąś główną flagą to możesz użyć zmiennych globalnych. W większości przypadków nie możesz, a już na pewno nie w tak prostym kodzie.


do not code, write prose
S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

Kurcze poprawiłem to tak jak potrafiłem program odpala ale sie zawiesza gdzies pewnie dalem czegos za duzo albo czegos nie dopisalem przypuszczam ze przy funkcjach co o tym sądzicie?

Kopiuj
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int macierz();
int wypisanie();
int sumowanie();

int main ()
{
    int N, M;
    int **tab;
    int i;

    printf("\n Podaj liczbe kolumn oraz wierszy swojej macierzy KWADRATOWEJ: ");
    scanf("%d", &N);
    M=N;

    macierz();
    wypisanie();
    sumowanie();

    for(i=0; i<M; i++)      // CZYSZCZENIE TABLICY przez funkcje free
    free(tab[i]);
    free(tab);
system("pause");
return 0;
}

int macierz(int **tab, int N, int M)
{
    int i, j;

    tab=(int**)malloc(N*sizeof(int *));     // ODWOLANIE DO WSKAZNIKOW PRZEZ malloc
    for(i=0; i<M; i++)
    {
        tab[i]=(int*)malloc(M*sizeof(int));
    }

    srand((unsigned int) time(NULL));
        for (i=0; i<N; i++)
            for (j=0; j<M; j++)
                tab[i][j] = rand() % 10; // dzielone przez dziesiec lczby calkowite do 10

    return **tab;

}

int wypisanie(int **tab, int N, int M)
{
    int i, j;
    for(i=0;i<N;i++)
    {
        for(j=0; j<M; j++)
        {
            printf("%3d ", tab[i][j]);
        }
        printf("\n");
    }
    return 0;
}

int sumowanie(int **tab, int N, int M)
{
        int skos, nad, pod;
        int i, j;
        skos = nad = pod = 0;

        for (i=0; i<N; i++){
            for (j=0; j<M; j++)
            {
                if (i<j) nad+=tab[i][j];
                if (i==j) skos+=tab[i][j];
                if (i>j) pod+=tab[i][j];
            }
        }

        printf("a)\tSuma liczb macierzy nad przekatna jest rowna: %d\n",nad);
        printf("b)\tSuma liczb macierzy na przekatnej jest rowna: %d\n",skos);
        printf("c)\tSuma liczb macierzy pod przekatna jest rowna: %d\n",pod);

return 0;
} 
NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
0

Skoro już masz funkcje, które przyjmują argumenty, to musisz je wywoływać z argumentami i ich deklaracje na górze też powinny mieć argumenty...

S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

Ale jak już wstawiłem to w nastepujacy sposób:

Kopiuj
int macierz(int **tab, int N, int M);
int wypisanie(int **tab, int N, int M);
int sumowanie(int **tab, int N, int M);

int main ()
{
    int N, M;
    int **tab;
    int i;

    printf("\n Podaj liczbe kolumn oraz wierszy swojej macierzy KWADRATOWEJ: ");
    scanf("%d", &N);
    M=N;

    macierz(int **tab, int N, int M);
    wypisanie(int **tab, int N, int M);
    sumowanie(int **tab, int N, int M); 

to w

Kopiuj
main

przy macierz(int **tab, int N, int M);

Kopiuj
 niechce kompilować ;/
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:25 dni
  • Lokalizacja:Kraków
  • Postów:1055
1

macierz (tab, N, M);


do not code, write prose
NO
  • Rejestracja:około 14 lat
  • Ostatnio:około 8 lat
1

No i dobrze, że nie chce...
Wywołujesz funkcję printf poprawnie - przekazując jej jako argument pewien tekst, czyli zakładam, że wiesz jak się wywołuje funkcje. Ciekawostka: deklaracja tej funkcji wygląda podobno tak:

Kopiuj
 int printf(const char *format, ...);

To jest moment, w którym powinieneś rozróżniać czym się różni deklaracja funkcji od wywołania tej funkcji...

I teraz wracamy do Twojego problemu: wywołaj w funkcji main funkcje, zamiast próbować powtórzyć ich deklaracje...

S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

w

Kopiuj
main

zmienilem jak wyzej macierz (tab, N, M);

Kopiuj
 ale nie wiem juz sam jak to powinno być przy tym deklarowaniu jak wywolywałem inne funkcje to zawsze tak wystarczalo ;/
pingwindyktator
znowu Cię nie rozumiem
S0
no wlasnie ja też już nie rozumiem gdzie jest ten błąd :(
Silv
Moderator Wiki
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
2
  1. Rzecz pierwsza: ja bym ci radził zawsze inicjalizować zmienne (jakąś wartością, jakąś domyślną najlepiej), czyli: zamiast int N pisz int N = 0.

  2. Ponadto, zawsze radziłbym ci pisać deklaracje osobno w każdej linijce, czyli:
    zamiast

Kopiuj
int N = 0, M = 0;

pisz

Kopiuj
int N = 0;
int M = 0;

A to z uwagi tylko i wyłącznie na to, że tak łatwiej jest potem zobaczyć, gdzie jest błąd (w szczególności, jak już zaczniesz używać debuggera). :)

  1. Punkt widzenia @pingwindyktator -a odnośnie zmiennych globalnych zapamiętaj, bo to bardzo dobry punkt widzenia :) - używać ich jak najrzadziej.

  2. Nie bardzo rozumiem, po co tworzysz w tym programie zmienną M, można przecież wykorzystać dwa razy N, no ale może takie miałeś wytyczne może z poprzedniego zadania, czy od wykładowcy, nie wnikam. Jeśli jednak nie, to radziłbym ci usunąć M i napisać N. No, chyba, że planujesz w przyszłości zmienić ten program, żeby działał dla dowolnej macierzy. :)

  3. Pochwalę twój kod, że ładnie wyodrębniłeś funkcje, a w programie głównym zostawiłeś tylko to, co niezbędne. :)

  4. Przepraszam, ale w zasadzie nie pamiętam już, co miałeś źle. Chyba chodziło tylko o brak argumentów.

  5. Funkcja wypisanie zwraca int (0), a nie byłoby bardziej naturalnie void?

  6. Według mnie dobrze byłoby, byś miał alokację pamięci na tym samym poziomie, co zwalnianie pamięci (albo oba w main, albo oba w oddzielnych funkcjach). To może nie jest istotne z punktu widzenia poprawności, ale według mnie poprawia czytelność. I ustrzeże cię przed błędami.

  7. Co do deklaracji funkcji:

Z funkcjami w C można się obchodzić na 3 sposoby:

  • deklaracja,
  • definicja,
  • wywołanie.

Deklaracja funkcji wygląda tak: void funkcja(int parametr); lub bez nazwy parametru int funkcja(int);, co jest równoważne. Spotkałem się też z określeniem "zapowiedź" funkcji. Deklarację funkcji należy umieścić PRZED jej wywołaniem - w przypadku twojego programu to oznacza, że przed funkcją main.

Definicja funkcji wygląda tak: void funkcja(int parametr) { ... } (wielokropek to różne czynności). Definicję funkcji można umieścić po funkcji main, można też przed. I można przed, i po deklaracji. :)

Wywołanie funkcji wygląda tak: funkcja(10);. Jeżeli funkcja zwraca wartość, np. int, to można połączyć to z przypisaniem: int a = funkcja(10);.

Na koniec: sam się trochę nauczyłem o dynamicznej alokacji dzięki twojemu programowi. ;)

EDIT: program poprawiłem, zobacz, uruchom, sprawdź, czy działa - obejrzyj też zmiany (niewielkie): http://ideone.com/JcpKxY


edytowany 9x, ostatnio: Silv
pingwindyktator
No ale z tym system(&quot;pause&quot;) to nie jest dobry pomysł.
Silv
@pingwindyktator, być może w przypadku przenośności/szybkości programu tak, ale w tym wypadku wolałem już nie mieszać. ;)
S0
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 9 lat
  • Postów:10
0

Przepraszam że po takim czasie pisze ale miałem małe problemy z dostawcą internetu..:/

@Michał Bodziony Bardzo dziękuję za pomoc, ta parę poprawek a zmiana znacząca bo program w końcu działa poprawnie tzn tak jak miałem w moich założeniach jeszcze raz dziękuje i Pozdrawiam :)

temat można zamknąć uzyskałem pomoc jaką oczekiwałem :)

Silv
Nic się nie stało. :)
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)