Jazyk c
- mhl
- Středně pokročilý

-
- Registrován: 17. úno 2004
- Bydliště: Brno
- craven
- Nováček

-
- Registrován: 10. zář 2007
Tohle je zadání ulohy je k tomu i konstra jestli chceš. možná je to jednoduché ale já s c nemám moc zkušensotí tak pokud bys mi prosím poradil jak sestavit hlavní program dík:
Poslední změna: 5. září 2007
Zadání úlohy
Vytvořte program pro převod celých kladných čísel mezi číselnými soustavami. Program ze standardního vstupu načte údaj o základu vstupní číselné soustavy a celé kladné číslo v této číselné soustavě. Jeho hodnotu poté vypíše na standardní výstup ve stejném formátu jako vstup, ale ve výstupní soustavě, jejíž hodnota bude specifikována parametrem příkazového řádku. Program musí být schopen pracovat s číselnými soustavami o základu 2 až 36. Číslice vyšších soustav než desítkové budou reprezentovány znaky 'A' až 'Z' (velká písmena).
Program musí být schopen načíst maximální hodnotu datového typu unsigned long long (konstanta ULLONG_MAX z limits.h - více viz man limits.h). Program musí být schopen detekovat chybové stavy ve všech vstupních údajích.
Pro čtení ze standardního vstupu smíte použít výhradně funkce getchar() nebo getc(). Pro výpis výsledku na standardní výstup smíte použít výhradně funkce putchar() nebo putc() (to neplatí pro tisk nápovědy a chybových hlášení). Pro převod hodnot přečtených ze stdin je zakázáno používat knihovní funkce jazyka C, které problémy převodu mezi číselnými soustavami samy řeší (strtol(), ...). (Můžete je ovšem použít pro testování.)
Rozhraní programu
Program se bude spouštět s parametry s následujícím významem:
Příkazový řádek Očekávaný vstup Bude tisknout na výstup Poznámka
proj1 -h vytiskne nápovědu Povinně
proj1 OUT IN INVALUE OUT OUTVALUE Povinně
proj1 OUT N IN INVALUE OUT 00000OUTVALUE - vytiskne zadanou hodnotu v číselné soustavě o základu OUT zarovnanou zleva nulami na N číslic Za prémii 1 bod.
Program musí být schopen pracovat s hodnotami v tomto formátu:
Z ZVALUE
kde Z je hodnota základu číselné soustavy od 2 do 36 zapsaná v desítkové soustavě a ZVALUE je vlastní hodnota čísla zapsaná číslicemi 0 až 9 a velkými písmeny A až Z v soustavě o základu Z. Obě tyto hodnoty leží na jediném řádku a jsou odděleny právě jednou mezerou.
Program musí být schopen správně načíst hodnotu v tomto formátu ze stdin a ve stejném formátu vytisknout výsledek na stdout.
Program musí být schopen zpracovat tento vstup zadaný na jednom řádku, kde jednotlivé hodnoty budou odděleny právě jednou mezerou. Zpracování většího množství zadání (např. jedno na každém řádku), akceptování malých písmen a až z na vstupu ani oddělení hodnot libovolným počtem bílých znaků není povinné.
Příklad: Po spuštění programu proj1[.exe] s parametrem 16
$ ./proj1 16
program očekává na standardním vstupu dvě hodnoty oddělené mezerou
2 000101
Toto zadání znamená, že program bude očekávat hodnotu ve dvojkové soustavě a vypíše ji v šestnáctkové soustavě na jediný řádek standardního výstupu ve stejné formě jako byl zadán vstup:
16 5
Pokud implementujete i druhý parametr příkazové řádky může zadání vypadat takto:
$ ./proj1 16 15
2 101
a odpovídající výstup takto:
16 000000000000005
Poslední změna: 5. září 2007
Zadání úlohy
Vytvořte program pro převod celých kladných čísel mezi číselnými soustavami. Program ze standardního vstupu načte údaj o základu vstupní číselné soustavy a celé kladné číslo v této číselné soustavě. Jeho hodnotu poté vypíše na standardní výstup ve stejném formátu jako vstup, ale ve výstupní soustavě, jejíž hodnota bude specifikována parametrem příkazového řádku. Program musí být schopen pracovat s číselnými soustavami o základu 2 až 36. Číslice vyšších soustav než desítkové budou reprezentovány znaky 'A' až 'Z' (velká písmena).
Program musí být schopen načíst maximální hodnotu datového typu unsigned long long (konstanta ULLONG_MAX z limits.h - více viz man limits.h). Program musí být schopen detekovat chybové stavy ve všech vstupních údajích.
Pro čtení ze standardního vstupu smíte použít výhradně funkce getchar() nebo getc(). Pro výpis výsledku na standardní výstup smíte použít výhradně funkce putchar() nebo putc() (to neplatí pro tisk nápovědy a chybových hlášení). Pro převod hodnot přečtených ze stdin je zakázáno používat knihovní funkce jazyka C, které problémy převodu mezi číselnými soustavami samy řeší (strtol(), ...). (Můžete je ovšem použít pro testování.)
Rozhraní programu
Program se bude spouštět s parametry s následujícím významem:
Příkazový řádek Očekávaný vstup Bude tisknout na výstup Poznámka
proj1 -h vytiskne nápovědu Povinně
proj1 OUT IN INVALUE OUT OUTVALUE Povinně
proj1 OUT N IN INVALUE OUT 00000OUTVALUE - vytiskne zadanou hodnotu v číselné soustavě o základu OUT zarovnanou zleva nulami na N číslic Za prémii 1 bod.
Program musí být schopen pracovat s hodnotami v tomto formátu:
Z ZVALUE
kde Z je hodnota základu číselné soustavy od 2 do 36 zapsaná v desítkové soustavě a ZVALUE je vlastní hodnota čísla zapsaná číslicemi 0 až 9 a velkými písmeny A až Z v soustavě o základu Z. Obě tyto hodnoty leží na jediném řádku a jsou odděleny právě jednou mezerou.
Program musí být schopen správně načíst hodnotu v tomto formátu ze stdin a ve stejném formátu vytisknout výsledek na stdout.
Program musí být schopen zpracovat tento vstup zadaný na jednom řádku, kde jednotlivé hodnoty budou odděleny právě jednou mezerou. Zpracování většího množství zadání (např. jedno na každém řádku), akceptování malých písmen a až z na vstupu ani oddělení hodnot libovolným počtem bílých znaků není povinné.
Příklad: Po spuštění programu proj1[.exe] s parametrem 16
$ ./proj1 16
program očekává na standardním vstupu dvě hodnoty oddělené mezerou
2 000101
Toto zadání znamená, že program bude očekávat hodnotu ve dvojkové soustavě a vypíše ji v šestnáctkové soustavě na jediný řádek standardního výstupu ve stejné formě jako byl zadán vstup:
16 5
Pokud implementujete i druhý parametr příkazové řádky může zadání vypadat takto:
$ ./proj1 16 15
2 101
a odpovídající výstup takto:
16 000000000000005
- mhl
- Středně pokročilý

-
- Registrován: 17. úno 2004
- Bydliště: Brno
Nejprve si napíšeš funkci, která načtě řádek ze stdin. Další funkcí ten načtený řádek zpracuješ na číslo, který pak převedeš do výsledné soustavy a další funkcí to vyplivneš ven. No a pak ještě musíš vyřešit zpracování argumentů příkazové řádky. Nejspíš ve výsledku problém rozložíš do více funkcí, což je dobře ... tohle je jen velice zjednosušená verze.
A doporučuju sem nedávat žádný větší celky kódu z výsledného programu, protože když to někdo zkopíruje a odevzdá, oba přijdete o body za tento projekt
...minulej rok na tom vyhořelo dost lidí 
A doporučuju sem nedávat žádný větší celky kódu z výsledného programu, protože když to někdo zkopíruje a odevzdá, oba přijdete o body za tento projekt
- Ssnake
- Začátečník

-
- Registrován: 25. led 2005
- Bydliště: chotebuz
nekde mam prog. na prevod mezi soustavami, mozna by ti to mohlo pomoct...kdyz tak pm (ale zrovna jsem bez kompu takze by to chvili trvalo nez bych se k tomu dostal)
FD node 202, ST45SF, Z97i, i7-4980HQ CB20:1718,CB24:254 NH-L9i, 2x8, R9NANO , 5100MAX
x850xtPE, x1950xtx, hd2900gt, hd3870, hd4890, hd5870 - - 6800ultra, 7900gtx, 8800gtx, 9800gtx+, gtx285
x850xtPE, x1950xtx, hd2900gt, hd3870, hd4890, hd5870 - - 6800ultra, 7900gtx, 8800gtx, 9800gtx+, gtx285
- craven
- Nováček

-
- Registrován: 10. zář 2007
- craven
- Nováček

-
- Registrován: 10. zář 2007
jo hele tohle jsem napsal když jsem se učil je to konverze hexadecimalniho čísla na dekadické
int c1, c2, i;
c1 = getchar();
c2 = getchar();
if (c1 >= '0' && c1 <= '9')
i = 16 * (c1 - '0');
else
/* predpokladame, ze je cislo zadane velkymi pismeny
a ze je v povolenem rozsahu */
i = 16 * (c1 - 'A' + 0xA);
if (c2 >= '0' && c2 <= '9')
i += c2 - '0';
else
i += c2 - 'A' + 0xA;
printf("Dekadicka hodnota je: %d\n", i);
return 0;
já si myslím že zakopaný pes musí být někde v tom hm?samozřejmě bych pak napsal víc algoritmů pro ednotlivé převody co?
int c1, c2, i;
c1 = getchar();
c2 = getchar();
if (c1 >= '0' && c1 <= '9')
i = 16 * (c1 - '0');
else
/* predpokladame, ze je cislo zadane velkymi pismeny
a ze je v povolenem rozsahu */
i = 16 * (c1 - 'A' + 0xA);
if (c2 >= '0' && c2 <= '9')
i += c2 - '0';
else
i += c2 - 'A' + 0xA;
printf("Dekadicka hodnota je: %d\n", i);
return 0;
já si myslím že zakopaný pes musí být někde v tom hm?samozřejmě bych pak napsal víc algoritmů pro ednotlivé převody co?
- mhl
- Středně pokročilý

-
- Registrován: 17. úno 2004
- Bydliště: Brno
- Ssnake
- Začátečník

-
- Registrován: 25. led 2005
- Bydliště: chotebuz
fce kde parametr bude i ciselna soustava pred/po vypoctu, teda vlastne 2 - jedna co prevede jakoukoliv soustavu na 10vou a druha ktera prevede 10vou na jakoukoliv...pak staci :craven píše:počky takže to bude vypadat jak?
fce nacti();
fce preved_na_10();
fce preved_z_10();
fce vypis/uloz/cokoliv...
tou vyslednou a vstupni soustavou bude delit/nasobit/neco delat takze to das jako parametr a je to, mit 32 ruznych fci by bylo trochu....neefektivni
FD node 202, ST45SF, Z97i, i7-4980HQ CB20:1718,CB24:254 NH-L9i, 2x8, R9NANO , 5100MAX
x850xtPE, x1950xtx, hd2900gt, hd3870, hd4890, hd5870 - - 6800ultra, 7900gtx, 8800gtx, 9800gtx+, gtx285
x850xtPE, x1950xtx, hd2900gt, hd3870, hd4890, hd5870 - - 6800ultra, 7900gtx, 8800gtx, 9800gtx+, gtx285
- craven
- Nováček

-
- Registrován: 10. zář 2007
- Ssnake
- Začátečník

-
- Registrován: 25. led 2005
- Bydliště: chotebuz
nevim jestli "štyri" ale tak nejak, cim vic to rozdelis na male casti tim lepsi...pri tak malem programku klidne pouzijes globalni promenne a ty si budes mezi tema fcema prehazovat...craven píše:takže jestli tomu rozumím budu mít štyři algoritmy jo?
FD node 202, ST45SF, Z97i, i7-4980HQ CB20:1718,CB24:254 NH-L9i, 2x8, R9NANO , 5100MAX
x850xtPE, x1950xtx, hd2900gt, hd3870, hd4890, hd5870 - - 6800ultra, 7900gtx, 8800gtx, 9800gtx+, gtx285
x850xtPE, x1950xtx, hd2900gt, hd3870, hd4890, hd5870 - - 6800ultra, 7900gtx, 8800gtx, 9800gtx+, gtx285