NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Jakub Sobinovsky:10.12.2016 23:25

Sorry že sa vas tu tak často pýtam na nejaké veci ale som začiatočník a hlavne samouk takže sa nejak nemam kde obratiť :) Dakujem vám za všetky vaše rady :)

#include<iostream>
using namespace std;
int main()
{
        double a;
        a=2.03;
        cout << "k       a" << "\n";
        cout << "________" << "\n";
    for(int k=1;k < 27; k++)
        {
          a=1/3*a;
          if(a<0.07)
          break;
          cout << k << "   " << a << "\n";
        }
        return 0;
}

Kedže podmienka je že ked vysledok bude a < 0.07, vysledok a=0.67
Takže program si to zaokruhluje na cele cisla ? A preto nastane prikaz break pretože v tom pripade podmienka plati ?
Prikladam zadanie na konverziu z wolfram mathematica ak by sa do toho niekto vyznal.

Editováno 10.12.2016 23:25
 
Odpovědět
10.12.2016 23:25
Avatar
Libor Šimo (libcosenior):11.12.2016 7:02

Jakub, kde tam vidis zaokruhlenie na cele cislo? Ak je v matematickej operacii aspon jedno cislo desatinne, vysledok je desatinne cislo, navyse v kode sa pracuje ako so zakladom s double a.
A ano, ak je splnena podmienka if(), vykona sa kod v jej tele, v tomto pripade prikaz break, ktory sposobi vyskocenie z cyklu for() a tym ho ukonci.

Nahoru Odpovědět
11.12.2016 7:02
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Radek Chalupa:11.12.2016 7:55

Obávám se že nikoliv. Desetinná by musela být ta 1, kterou dělí. např. výraz double a = 1/3*5.6 bude vždy a rovno 0.
Stačí když napíšes a= 1.0/3*a popř a = (double)1/3*a a vyjde to podle očekávání.

Radek Chalupa

  • školení programování, konzultace (C/C++, C#, WinAPI, .NET Framework, COM, ActiveX, ATL, MFC, ...)
  • vývoj software na zakázku

http://www.radekchalupa.cz

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
11.12.2016 7:55
Avatar
Odpovídá na Radek Chalupa
Libor Šimo (libcosenior):11.12.2016 8:27

Jasne, mas pravdu. O:-)

Nahoru Odpovědět
11.12.2016 8:27
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Radek Chalupa
Jakub Sobinovsky:11.12.2016 13:05

Prečo a hlavne kedy sa píše (double) pred operaciu 1/3*a ? :) A inak ide to takže super :). Dakujem :)

 
Nahoru Odpovědět
11.12.2016 13:05
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na Jakub Sobinovsky
Martin Dráb:11.12.2016 13:11

To se musíš podívat na pořadí, v jakém bude překladač vyhodnocovat (případně generovat vyhodnocení) výrazu 1/3*a. Vzhledem k shodné prioritě operátorů dělení a násobení bude výraz vyhodnocován zleva doprava.

Nejprve přijde na řadu 1/3, kde dělenec i dělitel jsou celá čísla, a tak bude výsledkem opět celé číslo – v tomto případě nula. Následně je tato nula vynásobena činitelem a, jehož datový typ již nic nezmění na výsledku celé operace – nule.

V tomto případě je nejjednodušší ten výraz zapsat jako a / 3.

Editováno 11.12.2016 13:12
Nahoru Odpovědět
11.12.2016 13:11
2 + 2 = 5 for extremely large values of 2
Avatar
Odpovídá na Jakub Sobinovsky
Libor Šimo (libcosenior):11.12.2016 16:01

Je somarina sa tu pytat na otazky, ktore su zodpovedane v miestnych tutorialoch.
Takze najprv studuj a az potom sa pytaj.

Nahoru Odpovědět
11.12.2016 16:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.