Malá hra o Velkého Bajta (0) - Jednoduchá kalkulačka

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

Denis V.
Level 3.5
Level 3.5
Příspěvky: 992
Registrován: květen 13
Pohlaví: Muž
Stav:
Offline

Re: Malá hra o Velkého Bajta (0)

Příspěvekod Denis V. » 01 lis 2015 20:54

Už jsem vypnul PC, opravím zítra, co přesně nefunguje? :)

Edit: už to vidím, pokazily se linky, opravuji.

Reklama
Uživatelský avatar
second32
Level 3
Level 3
Příspěvky: 542
Registrován: únor 15
Pohlaví: Muž
Stav:
Offline

Re: Malá hra o Velkého Bajta (0)

Příspěvekod second32 » 06 lis 2015 16:25

Po trošku delší době, ale udělal jsem to takhle. exe

Kód: Vybrat vše

#include <iostream>

int main()
{
   using namespace std;
   double cislo1, cislo2;
   char znamenko;
   while (true)
   {
      cout << "Zadejte priklad ve tvaru 1 + 1:" << endl;
      cin >> cislo1 >> znamenko >> cislo2;
      switch(znamenko)
      {
         case '+':
            cout << cislo1 << " + " << cislo2 << " = " << cislo1 + cislo2 << endl;
            break;
         case '-':
            cout << cislo1 << " - " << cislo2 << " = " << cislo1 - cislo2 << endl;
            break;
         case '*':
            cout << cislo1 << " * " << cislo2 << " = " << cislo1 * cislo2 << endl;
            break;
         case '/':
            if (cislo2 == 0) cout << "Nulou nelze delit!" << endl;
            else cout << cislo1 << " / " << cislo2 << " = " << cislo1 / cislo2 << endl;
            break;
         default:
            cout << "Neplatny znak" << endl;
      }
      cout << "Pro pokracovani napiste \"Y\", pro ukonceni jakykoli jiny znak." << endl;
      cin >> znamenko;
      if (znamenko != 'Y' && znamenko != 'y') exit(0);
   }
   return 0;
}


Teď se mrknu na druhý bit, co se třetího týče, tak si moc nevěřím.

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

Re: Malá hra o Velkého Bajta (0)

Příspěvekod faraon » 06 lis 2015 19:37

Funguje to, počítá to, úkol splněn. A ten skoro padesátikilový exáč mě pobavil, u mě v Linuxu má program po zkompilování a stripnutí ladících informací necelých šest kilobajtů. Používáš Visual Studio? :lol:

Měl bych jenom dvě připomínky. Při první kompilaci jsem dostal hlášení:
error: ‘exit’ was not declared in this scope
Napravilo to inkludování příslušné knihovny z jazyka C:
#include <cstdlib>
Mimochodem, nebylo by lepší místo násilného ukončení celého programu prostě vyskočit z toho nekonečného cyklu příkazem break?

Druhá věc je trochu nepříjemnější, protože na ní může v budoucnu narazit i běžný uživatel, který dostane hotový program. Když při druhém a dalším výpočtu místo čísla ve výrazu zadáš nějaký nesmyslný vstup, třeba písmeno, program se zacyklí a pořád dokola vypisuje hlášení a pokouší se znovu a znovu načítat, což se dá ukončit jedině jeho zabitím. Zkus zapřemýšlet jestli by se to nedalo nějak ošetřit. Udělá mi to i když odpovím na otázku jestli chci pokračovat víc než jedním písmenem...
"Král Lávra má dlouhé oslí uši, král je ušatec!

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

Uživatelský avatar
second32
Level 3
Level 3
Příspěvky: 542
Registrován: únor 15
Pohlaví: Muž
Stav:
Offline

Re: Malá hra o Velkého Bajta (0)

Příspěvekod second32 » 06 lis 2015 21:23

Jo, Visual Studio a koukám, že je to dost vidět :D Ten include se mi někam vypařil, exit je tam schválně, chci to zavřít. Co se týče druhýho bodu, no říkal jsem si, že se cin.get() někde nevyhnu. Ok, mrknu na to.

Uživatelský avatar
second32
Level 3
Level 3
Příspěvky: 542
Registrován: únor 15
Pohlaví: Muž
Stav:
Offline

Re: Malá hra o Velkého Bajta (0)

Příspěvekod second32 » 07 lis 2015 20:02

No, takže asi takhle.

Kód: Vybrat vše

#include <iostream>
#include <cstdlib>

int main()
{
   using namespace std;
   double cislo1, cislo2;
   char znamenko;
   while (true)
   {
      cout << "Zadejte priklad ve tvaru 1 + 1:" << endl;
      znamenko = '\0';
      cin >> cislo1 >> znamenko >> cislo2;
      switch(znamenko)
      {
         case '+':
            cout << cislo1 << " + " << cislo2 << " = " << cislo1 + cislo2 << endl;
            break;
         case '-':
            cout << cislo1 << " - " << cislo2 << " = " << cislo1 - cislo2 << endl;
            break;
         case '*':
            cout << cislo1 << " * " << cislo2 << " = " << cislo1 * cislo2 << endl;
            break;
         case '/':
            if (cislo2 == 0) cout << "Nulou nelze delit!" << endl;
            else cout << cislo1 << " / " << cislo2 << " = " << cislo1 / cislo2 << endl;
            break;
         default:
            cout << "Neplatny znak" << endl;
      }
      cout << "Pro pokracovani napiste \"Y\", pro ukonceni jakykoli jiny znak." << endl;
      cin >> znamenko;
      cin.ignore(256, '\n');
      if (znamenko != 'Y' && znamenko != 'y') exit(0);
   }
   return 0;
}


Vyřešil jsem snad vše - nikde se to necyklí a při napsání víc znaků místo Y to ty ostatní ignoruje. Akorát při zadání něčeho jiného než čísla mě to nenechá rozhodnout o pokračování a nevím co s tím, ale to už nechám tak, jak to je. Uživatel ať dělá to, co má :D

M0dEx
nováček
Příspěvky: 3
Registrován: leden 16
Pohlaví: Muž
Stav:
Offline

Re: Malá hra o Velkého Bajta (0)

Příspěvekod M0dEx » 16 led 2016 22:23

Takže tady je můj program.
Můžete si s ním počítat třeba furt dokola, pokud vás to bude bavit :)
Zdroják, EXE

-M0dEx

Roidoc
Level 5
Level 5
Příspěvky: 2229
Registrován: červenec 15
Pohlaví: Muž
Stav:
Offline

Re: Malá hra o Velkého Bajta (0) - Jednoduchá kalkulačka

Příspěvekod Roidoc » 16 úno 2016 23:28

Hra je stále otevřena, tak se také zapojím.

ODKAZ KE STAŽENÍ
Naposledy upravil(a) Roidoc dne 02 bře 2018 00:31, celkem upraveno 1 x.

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Malá hra o Velkého Bajta (0) - Jednoduchá kalkulačka

Příspěvekod CZechBoY » 19 kvě 2017 01:34

Tak jsem se rozhodl, že zkusím ty tvoje bity taky udělat :D ale v php, žádný nízkoúrovňový C/C++. Jsem prostě už nevyknutej na tu hrůzu :-)
Kalkulačka, která umí zatím pouze sčítat celá čísla:
zdrojáky na githubu https://github.com/CZechBoY/easy-calculator, ukázka zatím nikde není, ale třeba zítra se k tomu dostanu a hodim to někam na web.
Hlavně jsem ten projekt udělal, abych si vyzkoušel nový technologie a ta kalkulačka je spíš vedlejší činnost :D
Vlastně kaklulačku jsem už dělal v Javě a pořád se mi nedaří najít ideální strukturu tříd. Nějaký nápady?
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

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

Re: Malá hra o Velkého Bajta (0) - Jednoduchá kalkulačka

Příspěvekod faraon » 19 kvě 2017 04:53

Ideální struktura tříd? Co třeba třída kalkulacka a v ní metody plus, minus, krat, deleno :lol:

Zkus to udělat v LISPu, tam přijdeš na nové nápady. A to myslím úplně vážně.
"Král Lávra má dlouhé oslí uši, král je ušatec!

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

zxretrosoft
nováček
Příspěvky: 38
Registrován: květen 14
Bydliště: Praha
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Malá hra o Velkého Bajta (0) - Jednoduchá kalkulačka

Příspěvekod zxretrosoft » 19 kvě 2017 08:39

To je krásná soutěž! :-)
Tak já se taky zapojím, zatím jen kalkulačka. Zkusil jsem ji ve FreeBasicu.

Kód: Vybrat vše

dim as single a,b,c
dim as single i,y
dim as string$ vyraz,znamenko,konec

znovu:
input vyraz

for i=1 To len(vyraz)
    if mid$(vyraz,i,1)="+" or mid$(vyraz,i,1)="-" or mid$(vyraz,i,1)="/" or mid$(vyraz,i,1)="*" then
        y=i-1
        znamenko=mid$(vyraz,y+1,1)
        exit for
    end if
next i

a=val(left(vyraz,y))
b=val(right(vyraz,len(vyraz)-(y+1)))

select case znamenko
    case "+"
        c=a+b
    case "-"
        c=a-b
    case "/"
        c=a/b
    case "*"
        c=a*b
end select

print c
sleep

konec=inkey$
if konec=chr$(27) then end

goto znovu


Exe:
https://www.dropbox.com/s/q557mq6rj0nq29q/kalkul.zip?dl=0

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Malá hra o Velkého Bajta (0) - Jednoduchá kalkulačka

Příspěvekod CZechBoY » 19 kvě 2017 08:51

@faraon jedna trida je hnus, neni to rozsiritelny...
@zxretrosoft to asi funguje jen pro jednociferny cisla ze? :-)
PHP, Nette, MySQL, C#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

someoneFromSomewhere
nováček
Příspěvky: 20
Registrován: květen 17
Pohlaví: Muž
Stav:
Offline

Re: Malá hra o Velkého Bajta (0) - Jednoduchá kalkulačka

Příspěvekod someoneFromSomewhere » 19 kvě 2017 18:57

Řešení chudého muže :D

Kód: Vybrat vše

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>

int main(int argc, char **argv) {
   int n1, n2;
   char zn;
   if (scanf(" %d %1[-+*/%] %d", &n1, &zn, &n2) == 3) printf(" = %d\n", (zn == '+' ? n1 + n2 : (zn == '-' ? n1 - n2 : (zn == '*' ? n1 * n2 : (zn == '/' ? n1 / n2 : n1 % n2)))));
   else printf(" ERR\n");
   return 0;
}


E// nebo menší úprava do nekonečného cyklu:

Kód: Vybrat vše

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>

int main(int argc, char **argv) {
   int n1, n2;
   char zn;
   while (scanf(" %d %1[-+*/%] %d", &n1, &zn, &n2) == 3) printf(" = %d\n", (zn == '+' ? n1 + n2 : (zn == '-' ? n1 - n2 : (zn == '*' ? n1 * n2 : (zn == '/' ? n1 / n2 : n1 % n2)))));
   return 0;
}
std::endl není nový řádek!


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Malá sestava do 30 tisíc
    od kupjec » 20 zář 2023 21:24 » v Rady s výběrem hw a sestavením PC
    14
    2185
    od kupjec Zobrazit poslední příspěvek
    25 zář 2023 11:26
  • Výběr skříně (zakoupená je malá) Příloha(y)
    od DaveMove » 09 čer 2023 15:35 » v Problémy s hardwarem
    8
    791
    od meda2016 Zobrazit poslední příspěvek
    09 čer 2023 20:27

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 4 hosti