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: 987
Registrován: květen 13
Pohlaví: Muž

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: 494
Registrován: únor 15
Pohlaví: Muž

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
Master Level 8
Příspěvky: 6314
Registrován: prosinec 10
Pohlaví: Muž

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...
"Pimonte, Pimonte, co jsi ty za pána, že za tebou padla ta majlandská brána, hop, hop, hop.
Ta majlandská brána a ty čtyři mosty, vystav si, Pi­monte, silnější forposty, hop, hop, hop!"

Píseň dobrého vojáka Švejka

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

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: 494
Registrován: únor 15
Pohlaví: Muž

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ž

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: 2233
Registrován: červenec 15
Pohlaví: Muž

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: 8709
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž

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#, LESS, TypeScript
PhpStorm, Docker, WinSCP, Opera browser, Windows 10
Xiaomi 3S (RAM 2GB, CZ LTE)
Raspberry PI 3 (KODI, Raspbian)

Uživatelský avatar
faraon
Master Level 8
Master Level 8
Příspěvky: 6314
Registrován: prosinec 10
Pohlaví: Muž

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ě.
"Pimonte, Pimonte, co jsi ty za pána, že za tebou padla ta majlandská brána, hop, hop, hop.
Ta majlandská brána a ty čtyři mosty, vystav si, Pi­monte, silnější forposty, hop, hop, hop!"

Píseň dobrého vojáka Švejka

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

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: 8709
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž

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#, LESS, TypeScript
PhpStorm, Docker, WinSCP, Opera browser, Windows 10
Xiaomi 3S (RAM 2GB, CZ LTE)
Raspberry PI 3 (KODI, Raspbian)

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

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
  • Excel - rozdělení JmenoPrijmeni podle velkého písmena
    od Marietta99 » 02 úno 2018 16:05 » v Kancelářské balíky
    10
    669
    od elninoslov
    07 úno 2018 08:20
  • iMac - Retina 4K, 21.5inch, 2017 - kalkulačka za 40 000,-?
    od andreah » 27 črc 2018 23:11 » v Problémy s hardwarem
    15
    616
    od dvorakj
    28 črc 2018 18:27
  • Jakmile dohraju hru tak se ta hra sekne a nereaguje a potom nejde zapnout hra
    od Gargi10 » 27 srp 2017 19:53 » v Hry
    4
    449
    od popcorn
    01 led 2018 15:20
  • Malá pamäť na Honor 4C
    od DJAdam » 05 led 2018 21:43 » v Mobily, tablety a jiná přenosná zařízení
    8
    391
    od DJAdam
    05 led 2018 23:10
  • Malá herní bezdrátová myš k macbooku
    od WinDroid » 18 pro 2017 23:36 » v Rady s výběrem hardwaru a sestavením PC
    0
    131
    od WinDroid
    18 pro 2017 23:36

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

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 0 hostů