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: 980
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: 458
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: 5968
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...
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

Uživatelský avatar
second32
Level 3
Level 3
Příspěvky: 458
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: 458
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: 2224
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Í

Kód: Vybrat vše

print("Vítej v Kalkulačce!\n")
první_číslo = float(input("Zadej první číslo: "))
druhé_číslo = float(input("Zadej druhé číslo: "))
součet = první_číslo + druhé_číslo
rozdíl = první_číslo - druhé_číslo
součin = první_číslo * druhé_číslo
podíl = první_číslo / druhé_číslo
print("Součet je: ",součet)
print("Rozdíl je: ",rozdíl)
print("Součin je: ",součin)
print("Podíl je: ",podíl)
print("\nKalkulačku ukonči jako obyčejný program stisknutím křížku.")
input()

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8690
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, Oracle
PhpStorm, xampp, WinSCP, Opera browser, Windows 10
Xiaomi 3S (RAM 2GB, CZ LTE), Microsoft Band 2
Raspberry PI 3, bez chlazení, v krabičce, 8 GB SD, KODI, Raspbian

Uživatelský avatar
faraon
Master Level 8
Master Level 8
Příspěvky: 5968
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ě.
Nejhroznější sen linuxáka: nabootuje počítač, a tam Windows.
Nejhroznější sen windowsáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen linuxáka: nabootuje počítač, a tam Linux.
Nejkrásnější sen windowsáka: nabootuje počítač.

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: 8690
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, Oracle
PhpStorm, xampp, WinSCP, Opera browser, Windows 10
Xiaomi 3S (RAM 2GB, CZ LTE), Microsoft Band 2
Raspberry PI 3, bez chlazení, v krabičce, 8 GB SD, 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
  • Programovatelná kalkulačka kolem 500,-?
    od missingno » 09 lis 2016 21:58 » v Vše ostatní (z oblasti IT)
    0
    209
    od missingno
    09 lis 2016 21:58
  • Zvládne moje kalkulačka Counter-Strike: Global Offensive?
    od Quick12 » 20 kvě 2017 21:50 » v Hry
    4
    334
    od Fiba
    21 kvě 2017 20:42
  • Jakmile dohraju hru tak se ta hra sekne a nereaguje a potom nejde zapnout hra
    od Gargi10 » 27 srp 2017 19:53 » v Hry
    1
    150
    od popcorn
    27 srp 2017 20:09
  • Mála podpora na webu
    od Akrej » 20 lis 2016 16:08 » v Vše ostatní (Off topic)
    2
    366
    od Akrej
    18 pro 2016 18:58
  • malá skriňa za 30 000
    od alkyfans » 27 lis 2016 11:10 » v Rady s výběrem hardwaru a sestavením PC
    13
    581
    od vuLva
    03 pro 2016 14:40

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ů