Stránka 1 z 2

C++ - incializace

Napsal: stř 21. lis 2012, 10:41
od acerr
Ahoj,
proč proměná c musí být incializována před cyklem? Když to neprovedu, hlásí to blbosti

Kód: Vybrat vše

#include <iostream>
int main()
{
    using namespace std;

    int first;
    int second;

    cout << "Zadejte prvni cislo:\n";
    cin >> first;
    cout << "Zadejte druhe cislo:\n";
    cin >> second;

    int c = 0;
    for (int i =first;i<=second;i++)
     c += i;



    cout << "\nSoucet cisel je: " << c << endl;
    return 0;
}


Re: C++ - incializace

Napsal: stř 21. lis 2012, 10:51
od Ssnake
tipl bych ze nemuzes c inicializovat v cyklu, ktery bezi vic nez jednou, nejde to ani logicky - kazdy cyklus by c bylo opet 0...
co je spatneho na tom to mit pred cyklem?

Re: C++ - incializace

Napsal: stř 21. lis 2012, 10:54
od acerr
Nic, mě šlo jen o to, proč ji nemohu incializovat až v cyklu - dát ji hodnotu i to by udělal poprvé a pak by už jen přičítal inkrementovanou hodnotu i ne?

Re: C++ - incializace

Napsal: stř 21. lis 2012, 10:55
od 1Pupik1989
Já teda c++ nějak neumím, ale u skoro všech jazyků je to stejné. Nejde použít proměnnou která neexistuje. Třeba string se logicky chová pro sčítání jinak, hodnoty to zapíše za sebe. Proto se musí nejdřív nadefinovat co to bude za typ.

Re: C++ - incializace

Napsal: stř 21. lis 2012, 10:58
od acerr
ok, dík

Re: C++ - incializace

Napsal: stř 21. lis 2012, 13:32
od Ssnake
acerr píše:Nic, mě šlo jen o to, proč ji nemohu incializovat až v cyklu - dát ji hodnotu i to by udělal poprvé a pak by už jen přičítal inkrementovanou hodnotu i ne?
myslis takhle?

Kód: Vybrat vše

   
    for (int i =first;i<=second;i++){
    int c = 0;
     c += i;
}
nebo

Kód: Vybrat vše

   
    for (int i =first;i<=second;i++)
    int c += i;

Re: C++ - incializace

Napsal: stř 21. lis 2012, 14:36
od acerr
to druhé sem myslel

Re: C++ - incializace

Napsal: čtv 22. lis 2012, 10:29
od Ssnake
v tom pripade ale nemas jiste ze C bude na zacatku cyklu 0 (spis mas jiste ze nebude, kdyby to uz teda proslo kontrolou, a v kazdem cyklu by to nejspis chtelo definovat nove c :-) )

Re: C++ - incializace

Napsal: ned 25. lis 2012, 12:26
od acerr
Jak v c++ vypíšu obsah proměné v binárním a hex tvaru?

Re: C++ - incializace

Napsal: pon 26. lis 2012, 00:29
od Maranov
http://www.cplusplus.com/reference/ios/hex/

Binární v std AFAIK není. Budeš si ho muset napsat sám.

Re: C++ - incializace

Napsal: pon 26. lis 2012, 14:45
od arxeiss
Binární celkově v C/C++ není, jen kompilátory pro mikročipy mají přidanou možnost zapsání proměnné v binárním tvaru. Vypsání možná některé pokročilejší budou mít taky...

Re: C++ - incializace

Napsal: stř 28. lis 2012, 22:09
od acerr
Ještě jeden problémek:
jak tento kód přepíšu pomocí 2D pole?

Kód: Vybrat vše

#include <iostream>
int main()
{
    using namespace std;
    int b = 0;
    const int months_in_year = 12;
    const char * months[months_in_year]
    {
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October ",
        "November",
        "December",
    };
    int pocet[months_in_year];

    for( int i = 0; i<12; i++)
    {
        cout << months[i] << endl;
        cin >> pocet[i];
    }
    for (int i = 0;i<12;i++)
    {
        b += pocet[i];
    }

    cout <<endl << "pocet prodanych knih je: " << b << endl;
    return 0;
}


Re: C++ - incializace

Napsal: čtv 29. lis 2012, 00:18
od Maranov
Proč?
Navíc, pokud je jedno pole typu char* a druhé int, tak je spojit nepůjde. Nehledě na to, že to druhé je nyní úplně zbytečné.

BTW to "const int months_in_year" tam je proto, aby si se vyvaroval psaní "12" později, tak ho dej i do těch forů.

Re: C++ - incializace

Napsal: čtv 29. lis 2012, 10:18
od acerr
takhle já to dělal podle zadání v knize a tam si to přejí udělat přes 2D pole, dík za upozornění na tu konstantu

Re: C++ - incializace

Napsal: čtv 29. lis 2012, 15:39
od Maranov
Což je na co se ptám - co to má dělat?

Re: C++ - incializace

Napsal: pát 30. lis 2012, 21:58
od acerr
zadání:
Představte si, že prodáváte knihu C++ pro každého. Napište program, do kterého bude možné zadat měsíční prodeje za rok (v počtu knih, ne v penězích). Program by měl v cyklu postupně vyzvat uživatele k zadání vstupu pomocí jmen měsíců získaných z pole char * incializovaného řetězci se jmény měsíců. Vstupní data by program ukládal do pole typů int. Dále by vypočítal součet hodnot pole a zobrazil celkový prodej za rok - to je zadání 4

5) Proveďte programátorská cvičení 4, ale použijte dvojrozměrné pole na uložení vstupních hodnot měsíčních prodejů za 3 roky. Zobrazte celkové prodeje za každý jednotliví rok a za všechny roky.

Vůbec nwm jak na to...
Ale tu 4ku mám správně ne?

Re: C++ - incializace

Napsal: pát 30. lis 2012, 22:39
od arxeiss
Ta 5ka je podle mě o tom, že budeš mít dvourozměrné pole, kde jeden rozměr je rok, a druhý měsíc... tudíž něco jako
int pole[3][12];

Re: C++ - incializace

Napsal: pát 30. lis 2012, 23:27
od Maranov
Dvourozměrné (statické) pole vytvoříš podobně jako jednorozměrné, jak psal arxeiss.

Pokud pak budeš chtít načíst/vypsat součty prodejů za všechny jednotlivé roky, pak udělej cyklus v cyklu. Načítání tří let v pseudokódu:

Kód: Vybrat vše

ProdejeZaTřiRoky := pole čísel 3 x 12;
Pro rok := 1 až rok 3:
  Pro měsíc := 1 až 12:
    ProdejeZaTřiRoky[rok][měsíc] := načtené prodeje;

Re: C++ - incializace

Napsal: sob 1. pro 2012, 20:52
od acerr
a tak jak by vypadal ten kód?

Re: C++ - incializace

Napsal: sob 1. pro 2012, 21:49
od Maranov
Dva cykly v sobě.
Jeden "for rok := 1 až 3" a druhý "for měsíc := 1 až 12". K poli pak přistoupíš "Pole[rok][měsíc]".