Stránka 1 z 2

Co je to odsazování?

Napsal: 15 dub 2017 20:25
od ladda
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.

Re: Co je to odsazování?

Napsal: 15 dub 2017 20:28
od Grander

Re: Co je to odsazování?

Napsal: 15 dub 2017 21:04
od faraon
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ů.

Re: Co je to odsazování?

Napsal: 16 dub 2017 12:15
od ladda
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ě?

Re: Co je to odsazování?

Napsal: 16 dub 2017 12:57
od faraon
Š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.

Re: Co je to odsazování?

Napsal: 17 dub 2017 15:50
od ladda
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

Re: Co je to odsazování?

Napsal: 17 dub 2017 16:33
od faraon
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:

Re: Co je to odsazování?

Napsal: 17 dub 2017 18:38
od ladda
K čemu jsou potom ty proměnné v praxi?

Re: Co je to odsazování?

Napsal: 17 dub 2017 19:14
od faraon
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ů...

Re: Co je to odsazování?

Napsal: 19 dub 2017 13:59
od ladda
KOd jsem si zkusil funguje ale nějak jsem nepochopil rozdíl mezi write a write line.

Re: Co je to odsazování?

Napsal: 19 dub 2017 15:43
od faraon
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.

Re: Co je to odsazování?

Napsal: 20 dub 2017 14:51
od ladda
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.