Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Čau, jde o úlohu 5-11 vycházející z úlohy 1-21. Obě jsou z knihy The C programming language od K&R.
Mám napsáno tohle:
"Write a program entab that replaces strings of blanks by the minimum number of tabs and blanks to achieve the same spacing. When either a tab or a single blank would suffice to reach a tab stop, which should be given preference?"
V tom nebyl celkem problém: kód
Pak mám ovšem zadání:
"Modify the program entab to accept a list of tab stops as arguments. Use the default tab settings if there are no arguments."
Tomu zadání prostě nerozumím. Chápu, že program má z příkazové řádky načíst případný seznam čísel, které představují zarážky. Nechápu ale, k jakému účelu mají tyto záražky v programu sloužit. Jak mám jednotlivé zarážky v tom programu použít?
Děkuji
Offline
K programu entab:
"When either a tab or a single blank would suffice to reach a tab stop, which should be given preference?"
... ja si osobne myslim, ze by se mela pouzit mezera ... zdrojovy kod ovsem pouzije TAB
qazasd@book:~/entab$ echo -n "aaaaaaa a" | ./a.out | hexdump -C 00000000 61 61 61 61 61 61 61 09 61 |aaaaaaa.a|
Ale zpet k dotazu.
Seznam zarazek se ma pouzit k urceni, kdy pouzit mezery a kdy tab. Pokud budu mit prvni zarazku na pozici 10 a text bude zacinat 10ti mezerami na vystupu staci jeden tab. V puvodni verzi by to byl jeden tab a 3 mezery.
Offline
↑ qazasd: Díky za odpověď. Nicméně stále mi to není úplně jasné. Znamená to, že zmíněné zarážky slouží k podobnému účelu, jako např. ve Wordu či Writeru tabulátory v nastavení odstavce? Protože pokud bych např. spustil entab s parametry "10 2 4", kterou ze zarážek se program bude, ve které chvíli, řídit? Jsem asi trošku natvrdlej :-)
Mimochodem, proč bys v tom případě, který uvádíš, použil mezeru místo znaku TAB?
Díky
Offline
↑ doomed:
Rekl bych, ze bude potreba pocitat s absolutni pozici na radku a porovnavat ji s "nasledujici zarazkou".
Coz lze implementovat napr. pomoci pole zarazek a poineru na nasledujici zarazku.
int zarazky[] = {4,8,20,30,0};
int *zarazka = zarazky;
int pozice_na_radku;
if(pozice_na_radku > *zarazka) zarazka++;
... otazka je jak se ma program chovat pokud je na vstupu vic tabu nez pocet definovanych zarazek a neni tak jasne kde ma tedy nasledujici text zacinat.
To s tou mezerou jsem myslel za predpokladu, ze program ma slouzit jako jakysi "cistic textu" a odstranovat prebytecne mezery. Kdyz by pak byl pouzit na normalni psany text napr. "Americká Nevada jako první na světě povolila provoz robotických aut" ... byla by prvni mezera (a mozna i nektere dalsi) nahrazena tabulatorem, coz je nesmysl.
Samozrejme kdyby se program mel pouzivat opravdu takto, napr. k odstranovani mezer pred odsazenym textem, ascii tabulkach nebo seznamech bylo by podle me v mistech, kde lze pouzit jak tab tak mezeru vhodne pouzit mezeru pouze pokud nenasleduje nebo nepredchazelo dalsi volne misto.
Napr v "Americka nevada" by tak byla pouzita mezera, ale v
Americka 8 Ceska 10
by za Americka byl pouzit tab. Samozrejme se tak kod dost komplikuje a je otazka jestli jsou tyhle ficury, ktere lze asi vymyslet do aleluja vubec zapotrebi :)
Offline