Lista jednokierunkowa.

Lista jednokierunkowa.
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Witam, muszę napisać projekt (prosty program który umożliwia dodawanie i usuwanie wizytówek).
Jak na razie udało mi się skleić takie coś:

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

typedef struct Wizytowki
    {
        char imie[30], nazwisko[30];
        char nazwafirmy[50], branza[30];
        char telefon[15], email[50], www[30], ulica[30], nrdomu[4], pocztowy[7], miasto[20];

        struct Wizytowki *nastepny;

    } Wizytowki;


// zlicza dlugosc listy
int dlugosc_listy(Wizytowki *lista)
{
    int d = 0;
    Wizytowki *wsk = lista;
    while(wsk != NULL)
    {
              d++;
              wsk = wsk->nastepny;
              }
    return d;
    }


// dodaje nowy wezel do listy
void dodaj(Wizytowki **lista, Wizytowki *nowa)
{
     while (*lista != NULL) lista = &((*lista)->nastepny);
     *lista = nowa;
     nowa->nastepny = NULL;
}



// dodaje wizytowke do listy
void dodajWizytowke(Wizytowki **lista)
{    char line[500];
     Wizytowki* nowa = (Wizytowki*)malloc(sizeof(Wizytowki));
     printf("\nPodaj imie: ");
     scanf("%s", nowa->imie);

     printf("Podaj nazwisko: ");
     scanf("%s", nowa->nazwisko);

     printf("Podaj nazwe firmy: ");
     fflush(stdin);
     fgets(nowa->nazwafirmy, sizeof nowa->nazwafirmy, stdin);


     printf("Podaj branze: ");
     fflush(stdin);
     fgets(nowa->branza, sizeof nowa->branza, stdin);

     printf("Podaj numer telefonu: ");
     fflush(stdin);
     fgets(nowa->telefon, sizeof nowa->telefon, stdin);

     printf("Podaj email: ");
     scanf("%s", nowa->email);

     printf("Podaj adres strony www: ");
     scanf("%s", nowa->www);

     printf("Podaj adres zamiszkania: \n");
     printf("Ulica: ");
     scanf("%s", nowa->ulica);

     printf("Numer domu: ");
     scanf("%s", nowa->nrdomu);

     printf("Kod pocztowy: ");
     scanf("%s", nowa->pocztowy);

     printf("Miasto: ");
     fflush(stdin);
     fgets(nowa->miasto, sizeof nowa->miasto, stdin);



     dodaj(lista, nowa);
}



//Wypisuje cala liste
void wypisz_liste(Wizytowki *lista)
{

     Wizytowki *wsk = lista;

     if(lista == NULL)
     printf("\nLISTA JEST PUSTA");
     else
     printf("Lista zawiera %d wizytowek: \n\n", dlugosc_listy(lista) );
     int i = 1;
     while( wsk != NULL)
     {
            printf("%d. %s %s\n firma: %s branza: %s telefon: %s email: %s\n %s\n Adres:\n %s %s \n %s %s\n", i, wsk->imie, wsk->nazwisko, wsk->nazwafirmy, wsk->branza, wsk->telefon, wsk->email, wsk->www, wsk->ulica, wsk->nrdomu, wsk->pocztowy, wsk->miasto);
            wsk=wsk->nastepny;
            i++;
     }
}

//wipisuje wybrana wizytowke po imieniu
void wypisz_wizytowke_lista(Wizytowki *lista, char wyszukaj[50])
{

     Wizytowki *wsk = lista;

     if(lista == NULL)
     printf("\nLISTA JEST PUSTA");

     int i = 1;
     while( wsk != NULL )
     {
         if(wyszukaj == wsk->imie)
         {
             printf("%d. %s %s\n firma: %s branza: %s telefon: %s email: %s\n %s\n Adres:\n %s %s \n %s %s\n", i, wsk->imie, wsk->nazwisko, wsk->nazwafirmy, wsk->branza, wsk->telefon, wsk->email, wsk->www, wsk->ulica, wsk->nrdomu, wsk->pocztowy, wsk->miasto);
         }
            wsk=wsk->nastepny;
            i++;
     }
}

//Usuwa wizytowke z listy
void usun(Wizytowki **lista, int ID)
{
             Wizytowki *poprzedni = NULL;
             Wizytowki *wsk = *lista;

             int i;
             for(i = 1; i < ID; i++)
             {
                     poprzedni=wsk;
                     wsk=wsk->nastepny;

                     }
             if(poprzedni==NULL)
             {
             (*lista)=(*lista)->nastepny;
             free(wsk);
             }
             else
             {
                 poprzedni->nastepny=wsk->nastepny;
                 free(wsk);
                 }
}

//Usuwa wizytowke z listy na podstawie numeru
void usun_wizytowke(Wizytowki **lista)
{
     int ID;
     printf("Podaj numer wizytowki do usuniecia: " );
     scanf("%d", &ID);

     if((ID > dlugosc_listy(*lista)) || (ID < 1))
     {
           printf("\nNie ma takiego indeksu");

           }
     else
     {
         usun(lista,ID);
         printf("\nUsunieto wizytowke");
         }
}

//usuwa branze z listy
int usun_branza_lista(char* usbranza, Wizytowki **lista)
     {
          Wizytowki *poprzedni=NULL;
          Wizytowki *wsk= *lista;
           //strcmp porownoje napisy
          while((wsk != NULL) && ( ( strcmp(wsk->branza, usbranza)!=0) ))
          {
                     poprzedni=wsk;
                     wsk=wsk->nastepny;
          }
          if(wsk == NULL )
          {
                 return 0;
                 }
          else
          {
                 if(poprzedni==NULL)
             {
             (*lista)=(*lista)->nastepny;
             free(wsk);
             }
             else
             {
                 poprzedni->nastepny=wsk->nastepny;
                 free(wsk);
                 }
               return 1;
               }
}

//usuwa po branzy
void usun_branza(Wizytowki **lista)
{
          char usbranza[30];
          int ilosc=0;

           printf("Podaj branze do usuniecia: ");
           fflush(stdin);
           fgets(usbranza, 30, stdin);



          while(usun_branza_lista(usbranza, lista)==1)
          {
              if(usun_branza_lista(usbranza, lista))
              ilosc++;

              else
              {
                  ilosc++;
                  break;
              }

          }

          if(ilosc>=1)
          printf("Usunieto wizytowki o podanej branzy");
          else
          printf("Zadna wizytowka nie zostala usunieta poniewaz branza nie istnieje");

          }




int main()
{

    int wybor=1, ile, k;
    char szukaj[50];
    Wizytowki *lista = NULL;

printf("\n\nWitaj w programie WIZYTOWNIK");

    while(wybor != 6)
           {


printf("\n\nmozesz korzystac z nastepujacych polecen:\n\n");
printf("1.Dodaj | 2.Edytuj | 3.Usun | 4.Wyswietl wszystkie | 5.Szukaj | 6.Wyjscie\n\n");
printf("wpisz 1,2,3,4,5 lub 6\n");
scanf("%d",&wybor);


switch(wybor)
{
    case 1:
    printf("Ile wizytowek chcesz dodac?\n");
    scanf("%d",&ile);
    if(ile==0)
    break;
    for(k=0;k<ile;k++)
    dodajWizytowke(&lista);
    break;

    case 3:
    printf("Wpisz 1 jesli chcesz usuwac na podstawie numeru \nlub 2 jesli chcesz usuwac dana branze\n");
    scanf("%d",&ile);
    if(ile==1)
    usun_wizytowke(&lista);
    else if(ile==2)
    usun_branza(&lista);
    break;

    case 4:
    wypisz_liste(lista);
    break;

    case 5:
    scanf("%s",szukaj);
    wypisz_wizytowke_lista(lista, szukaj);
    break;


}
}


    return 0;
}

Mam jednak problem z funkcją wyszukującą wizytówkę po imieniu wypisz_wizytowke_lista. Co powinienem zrobić aby zaczęła działać?
Zaznaczam, że słabo jeszcze znam ten język... Z góry dzięki za pomoc ;)

edytowany 2x, ostatnio: olesio
GR
  • Rejestracja:prawie 16 lat
  • Ostatnio:około 12 lat
2

W ten sposób nie porównujesz dwóch napisów, tylko wartości wskaźników na tablice znaków. Poczytaj o funkcji strcmp http://www.cplusplus.com/reference/cstring/strcmp/.

Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Dzięki. Wyszukiwanie już działa.

Może ktoś wie jak napisać funkcję do edytowania wizytówek?

edytowany 1x, ostatnio: zyznos321
2

Znajdz na liscie wskaznik na element ktory cie interesuje, potem zakatlizuj nowe dane.

Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

tylko jak je zaktualizować?

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
1

Pobierasz od usera dane, przekazujesz je do funkcji aktualizujacej.
Funkcja ta znajduje odpowiedni pointer w liscie i edytuje struktury wskazywana przez niego.
np. pointer_na_strukture->dana = nowa_wartosc;

Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Ok, dzięki. Postaram się coś skleić ;)

Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Jak już pisałem, słabo ograniam C... ;)
Napisałem na razie na podstawie wcześniejszych funkcji coś takiego ale niestety wartość się nie zmienia.
Może ktoś wyjaśni co zrobiłem źle?

Kopiuj
//edytuje wizytowke o podanym id
void edytuj(Wizytowki **lista, int ID)
{
             Wizytowki *poprzedni = NULL;
             Wizytowki *wsk = *lista;
             Wizytowki *nowa = (Wizytowki*)malloc(sizeof(Wizytowki));

             int i;
             char imie[10];
             for(i = 1; i < ID; i++)
             {
                     poprzedni=wsk;
                     wsk=wsk->nastepny;

               }

                     scanf("%s", imie);
                     nowa->imie==imie;


}


//funkcja edytujaca wizytowke
void edytuj_wizytowke(Wizytowki **lista)
{

int ID;
     printf("Podaj numer wizytowki ktora chcesz edytowac: " );
     scanf("%d", &ID);

     if((ID > dlugosc_listy(*lista)) || (ID < 1))
     {
           printf("\nNie ma takiego indeksu");

           }
     else
     {
         edytuj(lista,ID);
         printf("\nWizytowka zmieniona");
         }
}
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
2

nowa->imie==imie; // porównanie?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Zobacz pozostałe 5 komentarzy
_13th_Dragon
W takim razie czym edycja różni się od dodawania?
Z3
Aha... Czyli niestety nie ogarniam :/ Jak powinno to wyglądać?
_13th_Dragon
wpisywać do znalezionego rekordu.
Z3
gdybym jeszcze tylko wiedział jak... :D
Z3
jednak sobie poradziłem. Dzięki za pomoc ;)
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Została mi już tylko najtrudniejsza funkcja:

wyświetlanie wizytówek posegregowanych według nazwiska

Jak się w ogóle za to zabrać?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

dla list najbardziej pasuje:

  • przez scalanie
  • radix

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Może komuś się bardzo nudzi i mógłby napisać funkcję wyświetlającą wizytówki posortowane według imienia bo sam raczej nie dam rady? :D
Z góry dzięki ;)

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

to zrób to w sposób prymitywny:

  1. zliczasz ilość elementów (o ile od razu nie wiesz)
  2. przydzielasz tablice o odpowiednim rozmiarze
  3. do elementów tablicy przypisujesz wskaźniki do elementów listy
  4. odpalasz funkcję qsort
  5. wyświetlasz z tablicy
  6. usuwasz tablicę

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Z3
Jaki typ powinna mieć tablica ze wskaźnikami?
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1
Kopiuj
Wizytowki **tm=(Wizytowki**)malloc(N*sizeof(Wizytowki*));

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
N1
Po co qsort skoro nie gwarantuje on zatrzymania się programu w czasie O(n log n) Nie lepiej napisać listę z merge sort Tablica byłaby dobra gdybyśmy z góry znali liczbę elementów
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Jak mam teraz przypisać do elementów tej tablicy, wskaźniki do elementów listy?

Z3
ale jak odwoływać się do każdego indeksu/elementu tej tablicy bo za bardzo nie wiem?
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Pomoże ktoś? ;D

Zobacz pozostały 1 komentarz
Z3
właśnie o odwołanie ;)
n0name_l
Naprawde nie wiesz jak odwolac sie do jednowymiarowej tablicy i zabierasz sie za pisanie czegokolwiek? ;>
Z3
Nie wiem jak się odwołać do tej konkretnej tablicy: Wizytowki tm=(Wizytowki)malloc(Nsizeof(Wizytowki)); Dopiero się uczę :D
Z3
Aha... Dzięki :D No comment :P
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Niestety wiem, że nic nie wiem... Może ktoś się nudzi sklei za mnie funkcję wyświetlającą wizytówki posortowane według imienia? :/

n0name_l
Dasz rade, zrob dokladnie tak jak _13th_Dragon napisal, nie zniechacaj sie Od razu ;)
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Tak powinienem dodawać wskaźniki do tabeli?

Kopiuj
 int d=dlugosc_listy(lista);
    Wizytowki *wsk = lista;

    Wizytowki **tm=(Wizytowki**)malloc(d*sizeof(Wizytowki*));

    int i = 0;
    while(wsk != NULL)
    {

              tm[i]=wsk;
              wsk = wsk->nastepny;
              i++;


    }
edytowany 1x, ostatnio: zyznos321
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

można i tak, ale wole krótsze kody:

Kopiuj
 int N=0,i=0;
 for(Wizytowki *wsk=lista;wsk;wsk=wsk->nastepny) ++N;
 Wizytowki **tm=(Wizytowki**)malloc(N*sizeof(Wizytowki*));
 for(Wizytowki *wsk=lista;wsk;wsk=wsk->nastepny) tm[i++]=wsk;

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Jak się używa funkcji qsort? Posortuje ona wskaźniki dodane do tablicy na podstawie np. imienia?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Z3
Dzięki. Niestety nie wiem jak to zastosować w moim przypadku :/
_13th_Dragon
1. Zrozumieć jak działa tamto pod linkiem. 2. Zaadoptować dla twojego przypadku.
Z3
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Do czego jest te compar w tej funkcji? Może ktoś inny pomoże w zastosowaniu funkcji qsort? :D

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

A jak sobie wyobrazasz porownanie dwoch strktur?
Musisz zdefiniowac funkcja, ktora porowna po prostu. Funkcja ta ma zwracac int i pobierac 2 const void*.
W funkcji mozesz np. rzutowac to na swoj typ, porownywac lancuchy i zwracac odpowiednia wartosc.
Pozniej przekazujesz pointer do funkcji porownujacej do qsorta i tyle.

Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

I powinienem dodać tam np. porównywanie imienia i później przekazać to do qsort aby posortował w tabeli?

Zobacz pozostałe 4 komentarze
n0name_l
To po co marnujesz czas swoich profesorow skoro Tobie sie uczyc nie chce? + 4 sek google -> http://pl.wikibooks.org/wiki/C/qsort
_13th_Dragon
No to zamów wykonanie u fachowca. Głupota to najdroższa rzecz na świecie, za nią się płaci przez całe życie.
Z3
Przecież za to tym profesorom płacą... ;) PS: Dzięki za link.
_13th_Dragon
Nie, profesorom płacą aby ci to przystępnie wytłumaczyli, a to że nie zrozumiałeś i przy tym nie zadałeś stosownego pytania to głupota (za którą już płacisz)
Z3
dzięki, że mnie uświadomiłeś
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Jak mam się odwołać w funkcji porównującej w jednym warunku do bieżącego i następnego elementu listy?

Zobacz pozostałe 9 komentarzy
Z3
Tak. Czyli według imienia. Dlatego wcześniej pytałem jak porównać pierwsze imię/ pierwszy element z kolejnym imieniem?
_13th_Dragon
I kolo się zamyka, czytaj co ci na to odpowiedziałem poprzednio.
Z3
Może ktoś inny pomoże bo chyba się nie dogadamy?
_13th_Dragon
Jeżeli nie zauważyłeś to inni już dawno zrezygnowali bo nie rozumiesz o czym mówią.
Z3
Dlatego Tobie bardzo dziękuję ;)
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

pomoże ktoś posortować? ;)

n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
1

Dobra troche tak bardziej po przedszkolnemu.
Cel - porownanie 2 napisow.
Jako, ze C posiada funkcje porownujaca napisy to nie wiele trzeba zrobic.
strcmp(const char*, const char*).
Wywolanie:
strcmp("blabla", "lala");
Zwracana wartosc:
0 - jesli rowne.

0 - jesli pierwszy jest wiekszy.
<0 - jesli drugi jest wiekszy.
Funkcja ta porownuje po kolei odpowiadajace sobie znaki w lancuchu. Pasuje jak ulal.
Cel2 - posortowanie tablicy.
Tutaj rowniez C nie zawodzi i daje nam gotowca.
qsort(void*, unsigned, unsigned, int (cmp)(const void, const void*));
Wywolanie:
qsort(pointer, elements, size, compare_func);

Podsumowujac:
krok 1. tworzymy funkcje porownujaca:
int compare(const void* a, const void* b)
{
return strcmp((char*)a, (char*)b);
}
krok 2. wywolujemy qsort
qsort(adres_pierwszego_elementu_w_tablicy, liczba_elementow, rozmiar_elementow, funkcja_porownujaca);

Z3
Dzięki... Teraz może sobie poradzę :D
Z3
Może mógłbyś jeszcze pomóc w przypisaniu argumentów w funkcji porównującej? Mam posortować według imion ale jak to dodać do funkcji compare? Z góry dzięki ;)
n0name_l
Nie rozumiem o co Ci chodzi, a Ty chyba nie rozumiesz nad czym byl moj wywod.
Z3
co powinna porównywać strcmp( );? :D Imiona... Ale jak je tu wstawić?
rincewind
@n0name_l: w funkcji compare powinno raczej być strcmp(*(char**)a, *(char**)b). ;)
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
1
Kopiuj
int compare(const void* first, const void* second)
{
    return strcmp((Wizytowki*)first->imie, (Wizytowki*)second->imie);
}

int main()
{
    Wizytowki* tab[10];
    qsort(tab, 10, 30, compare);
    
    return 0;
}

P.S. nie mysle juz dzis, wiec z gory przepraszam za ew. bledy.

edytowany 3x, ostatnio: n0name_l
Z3
dzięki wieeeeeeeelkie :D
Z3
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 7 lat
  • Postów:65
0

Mam taki kod ale niestety wyświetla nieposortowaną listę. Proszę o wytknięcie błędów :D

Kopiuj
int compare(const void* first, const void* second)
{
    Wizytowki* a = (Wizytowki*)first;
    Wizytowki* b = (Wizytowki*)second;
    return strcmp((char*)a->imie, (char*)b->imie);
}

//funkcja wyswietlajacaposegregowane wizytowki
void sortuj_imie(Wizytowki *lista)
{

    int d=dlugosc_listy(lista);
    Wizytowki *wsk = lista;

    Wizytowki **tm=(Wizytowki**)malloc(d*sizeof(Wizytowki*));


    int i = 0;
    while(wsk != NULL)
    {

              tm[i]=wsk;
              wsk = wsk->nastepny;
              i++;

    }

    qsort(tm, i, sizeof(tm), compare);

    int j=0;

    while( j < i )
     {

            printf("%d. %s %s\n firma: %s branza: %s telefon: %s email: %s\n %s\n Adres:\n %s %s \n %s %s\n", j+1, tm[j]->imie, tm[j]->nazwisko, tm[j]->nazwafirmy, tm[j]->branza, tm[j]->telefon, tm[j]->email, tm[j]->www, tm[j]->ulica, tm[j]->nrdomu, tm[j]->pocztowy, tm[j]->miasto);
            j++;
     }



}
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

return strcmp(a->imie,b->imie)<0;


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Z3
dzięki... już działa :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)