Co je to odsazování?

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

ladda
nováček
Příspěvky: 7
Registrován: březen 17
Pohlaví: Muž
Stav:
Offline

Co je to odsazování?

Příspěvekod ladda » 15 dub 2017 20:25

Asi to bude znít trochu hloupě ale může mi někdo prosím vysvětlit co je to odsazování k čemu je a jak ho udělat?
Jsem začínající programátor.

Reklama
Uživatelský avatar
Grander
Level 4.5
Level 4.5
Příspěvky: 1888
Registrován: leden 12
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod Grander » 15 dub 2017 20:28


Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod faraon » 15 dub 2017 21:04

Odsazování (indentation) slouží k tomu, aby se program zpřehlednil a programátor se v něm sám vyznal. Zvýrazňuje nebo odděluje programové struktury a související celky:

Kód: Vybrat vše

void output(int kod)
     {
     int i=5;
     unsigned char text[7]={0};

     if (kod<128)
        putchar(kod);
     else
        {
        for (;kod;--i)
            {
            text[0]=(text[0]>>1)+128;
            text[i]+=(kod&63)+128;
            kod>>=6;
            }
        text[++i]|=text[0];
        printf("%s",text+i);
        }
     }

Porovnej to s tím samým kódem bez odsazování a řekni sám ve kterém se lépe orientuješ:

Kód: Vybrat vše

void output(int kod)
{
int i=5;
unsigned char text[7]={0};
if (kod<128)
putchar(kod);
else
{
for (;kod;--i)
{
text[0]=(text[0]>>1)+128;
text[i]+=(kod&63)+128;
kod>>=6;
}
text[++i]|=text[0];
printf("%s",text+i);
}
}

Odsazování může být buď horizontální, počtem mezer či tabulátorů na začátku řádku, nebo vertikální, pomocí prázdných řádků.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

ladda
nováček
Příspěvky: 7
Registrován: březen 17
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod ladda » 16 dub 2017 12:15

Výstřižek.PNG
Napsal jsem si takový jednoduchý prográmek prostě klasické analogové okno ve kterém se zobrazí nějaký text. Zkoušel jsem ten kod odsadit je to tak správně?

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod faraon » 16 dub 2017 12:57

Šlo to zkompilovat? Ještě by na začátku měl být "program název", nevím jak hodně je FP tolerantní.

Ano, takhle nějak se to v Pascalu obvykle dělá, dvě mezery na každou úroveň jsou pro začátečníka a tenhle jazyk dostačující.

Existuje strašně moc různých stylů odsazování, a každému může vyhovovat něco jiného, tak se nelekni když někde uvidíš něco takového: https://en.wikipedia.org/wiki/Indent_style Ty složené závorky { a } tam znamenají totéž co v Pascalu begin a end.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

ladda
nováček
Příspěvky: 7
Registrován: březen 17
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod ladda » 17 dub 2017 15:50

Abych zbytečně nezakladal nove tema. Zkusil jsem si napsat jednoduchý prográmek co mi vypíše hodnoty proměnných a funguje.
2.PNG
1.PNG

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod faraon » 17 dub 2017 16:33

Tohle není na nové téma, řešíme stále jednu věc.

Udělal jsi to dobře, akorát zrovna tady je to odsazování zbytečné. Máš tu souvislý blok příkazů, který vždy proběhne vcelku tak jak je. Pascal to co máš v jednom bloku mezi begin a end bere jako jeden příkaz, říká se tomu "složený příkaz".

Uvnitř jakéhokoliv bloku můžeš mít jiné bloky, v nich zase další, a v nich zase další, a tak dále jak potřebuješ, a abys na první pohled poznal odkud kam každý blok sahá a co všechno k němu patří, k tomu slouží právě to odsazování. Všechny řádky jednoho bloku začínají ve stejném sloupci, a řádky v něm vnořeného bloku jsou o kousek posunuté vpravo. Další v něm vnořený blok je zase o kousek dál, a další...

Pokud bys v tomhle prográmku chtěl zvýraznit jednotlivé části, tak by se hodilo spíš vertikální odsazení. Mezi nesouvisejícími částmi vynechat prázdný řádek, a za ním se už dělá něco jiného:

Kód: Vybrat vše

begin
  osoba1:='Michal';
  writeln(osoba1);
  readln;

  osoba2:='Lada';
  writeln(osoba2);
  readln;

  mesic1:='Duben';
  writeln(mesic1);
  readln;

  mesic2:='Kveten';
  writeln(mesic2);
  readln
end.

Každý ten úsek by ještě šel opatřit komentářem popisujícím přesně jeho činnost a účel, k tomu brzy dojdeš sám. I u jednoduchých programů už po pár týdnech nebudeš sám vědět co jsi tam vlastně prováděl, a bez komentářů ti bude dlouho trvat než ho znovu pochopíš tak, abys v něm mohl udělat třeba i jen jednoduchou úpravu. Bez nich bude rychlejší napsat to celé znova, než se tím snažit prokousávat :lol:
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

ladda
nováček
Příspěvky: 7
Registrován: březen 17
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod ladda » 17 dub 2017 18:38

K čemu jsou potom ty proměnné v praxi?

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod faraon » 17 dub 2017 19:14

A k čemu by byl v praxi program, který nezpracovává žádná data? Do těch proměnných se ukládají data za běhu, jsou to vlastně pojmenovaná místa v paměti, kam se zapíšou a kde je program najde když s nimi chce pracovat. Profesor Wirth, který Pascal vymyslel, o tom napsal knihu, která se jmenuje "ALGORITMY + DATOVÉ STRUKTURY = PROGRAMY".

Program sám o sobě je jenom zapsaný postup, jak se mají data přežvýkat, nic víc. A ta data dodá uživatel programu, který ho spustil! Vyzkoušej si tohle, zkus tam zadat třeba celou svojí rodinu:

Kód: Vybrat vše

program roky;

var narozeni,letopocet,vek:integer;

begin
  {vstup udaju}
  write('Zadej rok narozeni: ');
  readln(narozeni);
  write('Zadej letosni rok: ');
  readln(letopocet);

  {vypocet}
  vek:=letopocet-narozeni;

  {vypis vysledku}
  writeln('Letos je ti ',vek,' roku.');
  readln
end.

Takže jeden program, ale mnoho různých výsledků...
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

ladda
nováček
Příspěvky: 7
Registrován: březen 17
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod ladda » 19 dub 2017 13:59

KOd jsem si zkusil funguje ale nějak jsem nepochopil rozdíl mezi write a write line.

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7359
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod faraon » 19 dub 2017 15:43

Když něco nevíš nebo nechápeš, tak si to prostě vyzkoušej. Hraj si:

Kód: Vybrat vše

write(1);
writeln(2);
write(3);
writeln(4);

Schválně jestli na to přijdeš a dokážeš ten rozdíl popsat vlastními slovy ;-)

Jedna stará historka, kterou jsem kdysi našel někde na netu:
Vzpomněl jsem si na jednoho kamaráda, profesionálního programátora, který v devadesátých letech psal v Pascalu složité účetní programy. Byl jsem u něj v kanceláři, potřeboval si něco dokončit, tak jsem jej sledoval při práci.
Psal v modrém Borlandím editoru kód, najednou se zamyslel a natáhl do skříně pro knížku. Nalistoval stránku, nakoukl, knížku sklapnul a pokračoval v programování. Zajímalo mě, co takový profík používá za literaturu, tak jsem se podíval na obal. Stálo tam M. Virius: Základy programování - úvod do Turbo Pascalu.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

ladda
nováček
Příspěvky: 7
Registrován: březen 17
Pohlaví: Muž
Stav:
Offline

Re: Co je to odsazování?

Příspěvekod ladda » 20 dub 2017 14:51

Nejsem si tedy jistý ale write by tedy mělo přečíst třeba jen jedno slovo kdežto write line přečte celý řádek.


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host