C++ nekem|nektek

Indította Raisen, 2013 augusztus 01, 11:49:25 DÉLUTÁN

Előző téma - Következő téma

Raisen

Mostanában neki feküdtem a c++, na jó 1 napja :), és olyan kérdésem volna, hol találok magyar leírást a függvényekre mi miért van ? Régebben is keresgettem és nem találtam olyat amibe nem csak a sok kerítés és pofa lett volna. Viszonzás képen ha megtanulom átadom a tudást érthetően.
(Nem wowra szeretném felhasználni ezeket és nem 200 soros npc scriptekre, hanem külön álló programok írására.)

Példát írok és fel is töltöm amire magam jöttem rá (nagyrészt) csak a függvényekre kerestem külön rá mi mit tud a szisztémára meg egyszerűen logikával ki sakkoztam :)

Számológép szerű valami :D tud összeadni meg kivonni.
http://fbe.am/mrJ


Ezt sikerült fél óra tesztelgetéssel kihozni

#include <stdio.h>

main()

{
      int x;
      printf("Valasz modot 1 osszeadas,  2 kivonas ");
      scanf("%d",&x);
      if (x<2)
      {
      int k, h, t;
      printf("elso szam: ");
      scanf("%d",&k);
      printf("masodik szam: ");
      scanf("%d",&h);
      t=k+h;
      printf("Eredmeny: %d",t);
     
      getchar();
      getchar();
              }
              else
              {
     
     
      int k, h, t;
      printf("elso szam: ");
      scanf("%d",&k);
      printf("masodik szam: ");
      scanf("%d",&h);
      t=k-h;
      printf("Eredmeny: %d",t);
     
      getchar();
      getchar();
      }
     
      printf("Elso szamologep teszt c++ by Raisen");
       getchar();
     
     
      }



Ez most jutott eszembe :) Úgy szeretek valamit megtanulni, hogy értsem a lényegét és ne azért írjam azokat be, mert valahol úgy láttam és így kell megoldani. Hasonlónak érzem a dolgot mint egy függvényt benyalni, de nemtudni miért kell azt ott használni és csak a képletet tanulom meg. Így szerintem gyorsabb és élvezhetőbb a programozás, ha nem benyalt és direkt miatt használsz ott dolgokat. Először azt tesztelgettem a és b dolgot x dolog esetén ki íratni majd gondolkoztam épp ésszel mivan ha egy sorba rakom a változókat. Persze hibát dobott és írta miért egyértelmű volt vesszővel elválasztva talán működik. Így megvan az az élmény hó bassza meg ez így működik ezentúl így használom, mert gyorsabb mint új sorokba inteket szurkálni.

Holnap még babrálok rajta, hogy saját választott műveletet lehessen elvégezni ne ilyen gomb nyomkodós legyen aztán ha megvan neki futok visual studio grafikus felületének és megpróbálom egy saját dizájnolt számológépet összerakni ahol már digitális kijelző lesz és nem kell parancssoros futtatásba írogatni.

Megoldást ne írjatok, erre magam akarok rájönni :)

Jövőre nézve következő tervek egy saját naptár ami tud adatokat feljegyezni és valamelyik nap amit beállítasz x időben ki írja mi a dolgod.


▀█▀ █▀▀▄ █▀▀ █▀▀█ ▒█▀▀█ █▀▀█ █▀▀█ █░█ █▀▀█ █▀▀ █▀▀ ░ █░░█ █░░█
▒█░ █░░█ █▀▀ █░░█ ▒█▀▀▄ █▄▄█ █▄▄▀ █▀▄ █▄▄█ █░░ ▀▀█ ▄ █▀▀█ █░░█
▄█▄ ▀░░▀ ▀░░ ▀▀▀▀ ▒█▄▄█ ▀░░▀ ▀░▀▀ ▀░▀ ▀░░▀ ▀▀▀ ▀▀▀ █ ▀░░▀ ░▀▀▀

AximCore

#1
Idézetet írta: Raisen Dátum 2013 augusztus 01, 11:49:25 DÉLUTÁN
#include <stdio.h>

main()

{
      int x;
      printf("Valasz modot 1 osszeadas,  2 kivonas ");
      scanf("%d",&x);
      if (x<2)
      {
      int k, h, t;
      printf("elso szam: ");
      scanf("%d",&k);
      printf("masodik szam: ");
      scanf("%d",&h);
      t=k+h;
      printf("Eredmeny: %d",t);
     
      getchar();
      getchar();
              }
              else
              {
     
     
      int k, h, t;
      printf("elso szam: ");
      scanf("%d",&k);
      printf("masodik szam: ");
      scanf("%d",&h);
      t=k-h;
      printf("Eredmeny: %d",t);
     
      getchar();
      getchar();
      }
     
      printf("Elso szamologep teszt c++ by Raisen");
       getchar();
     
     
      }

Ez sima C, ebben semmi nincs amit a C++ STD-ből használnál, ha komolyabban akarsz vele foglalkozni akkor ajánlom ezt a könyvet megvenni/letölteni : http://www.kiskapu.hu/index.php?BODY=BookInfo&OP=details&ID=19100   ( és elolvasni :D )

Nem magyar, de jó segítség -> http://www.cplusplus.com/reference/
"Tanítani lehet az ostobát, de gondolkodásra bírni nem."
A Talmud

Windows Firewall
http://devopsreactions.tumblr.com/

Why use Windows, if you have open doors... to Linux

EroniX

#2
Szerintem továbbfejlesztés szempontjából egy remek funkció lenne ha a felhasználó megadhatná, hogy milyen műveletet végezzen a két értékkel.
Tehát valahogy így:

Írja be az 1. számot:
1. Szám beolvas.

Ciklus:
Írja be a 2. számot:
2. Szám beolvas.

Írja be a műveletet:
Művelet beolvas.

Ha a művelet kivonás (-):
Kivon

Ha a művelet összeadás (+):
Összead.

Ha a művelet szorzás (*):
Szoroz.

stb...
1. Szám egyenlő a kiértékelt eredménnyel.
Ciklus vége.

Kiértékelés.

Továbbá ezt belehetne rakni egy ciklusba, így több értéket is tudna kezelni. A ciklusból pedig akkor lépne ki ha mondjuk ír egy egyenlőséget, tehát:

Ha a művelet kiértékelés (=):
Kilép a ciklusból.
Azuregos Delta Force

Raisen

Köszi a válaszod, most utána is nézek.


▀█▀ █▀▀▄ █▀▀ █▀▀█ ▒█▀▀█ █▀▀█ █▀▀█ █░█ █▀▀█ █▀▀ █▀▀ ░ █░░█ █░░█
▒█░ █░░█ █▀▀ █░░█ ▒█▀▀▄ █▄▄█ █▄▄▀ █▀▄ █▄▄█ █░░ ▀▀█ ▄ █▀▀█ █░░█
▄█▄ ▀░░▀ ▀░░ ▀▀▀▀ ▒█▄▄█ ▀░░▀ ▀░▀▀ ▀░▀ ▀░░▀ ▀▀▀ ▀▀▀ █ ▀░░▀ ░▀▀▀

Raisen

#4
Na sikerült megoldani a művelet választós dolgot így néz ki.

#include <stdio.h>

main()

{
      int a;
      printf("Szamologep inditasa 1. gomb ");
      scanf("%d",&a);
      if (1==a)
      {
      int x,y;
      int z;
      int f;
     
      printf("Elso szam ");
      scanf("%d",&x);
      printf("masodik szam ");
      scanf("%d",&y);
      printf("muvelet 1. osszeadas 2. kivonas 3. szorzas 4. osztas ");
      scanf("%d",&f);
     
       if(1==f)
       {
      z=x+y;
      printf("eredmeny %d",z);
      }
      else
      {}
     
      if(2==f)
       {
      z=x-y;
      printf("eredmeny %d",z);
      }
      else
      {}
     
      if(3==f)
       {
      z=x*y;
      printf("eredmeny %d",z);
      }
      else
      {}
     
      if(4==f)
       {
      z=x/y;
      printf("eredmeny %d",z);
      }
      else
      {}
     
 
     
      }
      else
      {}
     
     

     
      getchar();
      getchar();
}

Amire nem jöttem rá, hogy a jelekre hogyan reagáljon pl * - / +, mert ha művelet értéket adok változónak ami legyen most + akkor beviszi az adatot és a következő lekérdezésbe (+==f) hibát dob. Szóval a kérdésem hogyan oldjam meg, hogy + * - / jelet az f  érték egyeztetésbe ne műveletnek nézze hanem egy egyszerű karakternek mint a számokat ?


▀█▀ █▀▀▄ █▀▀ █▀▀█ ▒█▀▀█ █▀▀█ █▀▀█ █░█ █▀▀█ █▀▀ █▀▀ ░ █░░█ █░░█
▒█░ █░░█ █▀▀ █░░█ ▒█▀▀▄ █▄▄█ █▄▄▀ █▀▄ █▄▄█ █░░ ▀▀█ ▄ █▀▀█ █░░█
▄█▄ ▀░░▀ ▀░░ ▀▀▀▀ ▒█▄▄█ ▀░░▀ ▀░▀▀ ▀░▀ ▀░░▀ ▀▀▀ ▀▀▀ █ ▀░░▀ ░▀▀▀

EroniX

Stringek? Illetve jelen esetben nézz utána a char változónak.
http://www.cplusplus.com/doc/tutorial/variables/
Azuregos Delta Force

Raisen

#6
for, while, do while ciklusoknál járok, eddig leköt a dolog több dimenziós tömb vagy mi a fene még nem tiszta de próbálkozok :D Azt hiszem mára ennyi elég volt belőle azóta néztem a könyvet csak nem haladok gyorsan, mert órákat leragadok egy egy résznél mért ketyeg az agyam mit lehet belőle kihozni legalább így emlékszek a dolgokra és kitapasztalom melyiket miben érdemes használni és miért előnyös.

Akkor újra gondolva a gép így néz ki :) (Kellemest a hasznossal úgy is a ciklusoknál járok holnap megpróbálkozok egy újra indítóval ami "add meg az első számot" részig visszadob még valami külső parancsot nem kap, hogy álljon le.)(Következő napokra átváltós rendszereket akarok tesztelgetni és kisebb egyenlet rendezős dolgokat. Gyök vonást nem tudom még hogy oldom meg(ötleteket szívesen fogadok), a négyzetre emelést egyszerűen saját változójával szorzom meg)((a[4]=a[3]*a[3]; ))



#include <iostream>

using namespace std;

int main()
{
    setlocale(LC_ALL, "hun");

    int a[5];

cout<<"Menü"<<endl;
cout<<"\n1. Összeadás"<<endl;
cout<<"2. Kivonás"<<endl;
cout<<"3. Szorzás"<<endl;
cout<<"4. Osztás"<<endl;

cout<<"Add meg az első számot"<<endl;
cin>>a[1];
cout<<"Add meg a második számot"<<endl;
cin>>a[2];
cout<<"Válasz műveletet"<<endl;
cin>>a[3];
if(a[3]==1)
{
    a[4]=a[1]+a[2];
cout<<"Az Eredmény: "<<a[4]<<endl;
}
if(a[3]==2)
{
    a[4]=a[1]-a[2];
cout<<"Az Eredmény: "<<a[4]<<endl;
}
if(a[3]==3)
{
    a[4]=a[1]*a[2];
cout<<"Az Eredmény: "<<a[4]<<endl;
}
if(a[3]==4)
{
    a[4]=a[1]/a[2];
cout<<"Az Eredmény: "<<a[4]<<endl;
}

}


Franc egye meg most, hogy elolvastam a saját posztom hibát vélek felfedezni :) Az osztásnál nem csak egész számok jönnek ki lehet float-al célszerűbb lett volna .


▀█▀ █▀▀▄ █▀▀ █▀▀█ ▒█▀▀█ █▀▀█ █▀▀█ █░█ █▀▀█ █▀▀ █▀▀ ░ █░░█ █░░█
▒█░ █░░█ █▀▀ █░░█ ▒█▀▀▄ █▄▄█ █▄▄▀ █▀▄ █▄▄█ █░░ ▀▀█ ▄ █▀▀█ █░░█
▄█▄ ▀░░▀ ▀░░ ▀▀▀▀ ▒█▄▄█ ▀░░▀ ▀░▀▀ ▀░▀ ▀░░▀ ▀▀▀ ▀▀▀ █ ▀░░▀ ░▀▀▀

Locutus

Sziasztok! Valaki megnézné ezt? Ha bele döglök akkor se jövök rá.
#include <iostream>
#include <string>
using namespace std;

class Calculator
{
        private:
                float answer;
                float memory;
        public:
                float Add(float, float);
                float Subtract(float, float);
                float Multiply(float, float);
                float Divide(float, float);
                float GetAnswer();
                float GetMemoryNumber();
                void  SetMemoryNumber(float);
};

float Calculator::GetAnswer()
{
        return answer;
        int main();
}

float Calculator::GetMemoryNumber()
{
        return memory;
}
void  Calculator::SetMemoryNumber(float x)
{
        memory = x;
}
float Calculator::Add(float x,float  y)
{
        answer = (x+y);
}
float Calculator::Subtract(float x,float y)
{
        answer = (x-y);
}
float Calculator::Multiply(float x,float y)
{
        answer = (x*y);
}
float Calculator::Divide(float x,float y)
{
        answer = (x/y);
}

int main()
{
        Calculator calc;
        float x;
        float y;
string op;
string function;
std::cout <<"\n*Possible operations are: (+, -, *, / mem, clearmem, prime)*\n" << std::endl;
std::cout <<"Please enter function: " << std::endl;
std::cin >> op;
       
       
        if (op == "mem")
        {
std::cout << "\nMEM = " << calc.GetMemoryNumber() << std::endl;
std::cout << "\nEnter operation then second number or q to quit:\n";
std::cin >> op >> y;
        }
       
        else if (op == "setmem")
        {
std::cout << "\nEnter MEM = ";
std::cin >> x;
        calc.SetMemoryNumber(x);
std::cout << "MEM set to: " << calc.GetMemoryNumber() <<std::endl;
std::cout << "\nEnter operation then second number or q to quit:\n";
std::cin >> op >> y;
        }

       
        if (op == "+")
        {
        calc.Add(x,y);
        std::cout << "\nAnswer = " << calc.GetAnswer() << std::endl;
        }
       
        else if (op == "-")
        {
        calc.Subtract(x,y);
        std::cout << "\nAnswer = " << calc.GetAnswer() << std::endl;
        }

        else if (op == "*")
        {
        calc.Multiply(x,y);
        std::cout << "\nAnswer = " << calc.GetAnswer() << std::endl;
        }

        else if (op == "/")
        {
        calc.Divide(x,y);
        std::cout << "\nAnswer = " << calc.GetAnswer() << std::endl;
        }
       

return 0;

}

Hibát is ír:
1>d:\program\program2\számológép\számológép\szamologep.cpp(57) : error C4716: 'Calculator::Divide' : must return a value
1>d:\program\program2\számológép\számológép\szamologep.cpp(52) : error C4716: 'Calculator::Multiply' : must return a value
1>d:\program\program2\számológép\számológép\szamologep.cpp(47) : error C4716: 'Calculator::Subtract' : must return a value
1>d:\program\program2\számológép\számológép\szamologep.cpp(42) : error C4716: 'Calculator::Add' : must return a value


Előre is köszönöm.
Álljon fel az ország imádandó széki!
Nemzetek, országok, hódoljatok néki!
Uralkodjék köztünk ész, érdem, igazság,
Törvény s egyenlőség, s te, áldott szabadság!

zerus

Idézetet írta: Locutus Dátum 2013 augusztus 03, 12:15:13 DÉLELŐTT
Sziasztok! Valaki megnézné ezt? Ha bele döglök akkor se jövök rá.
#include <iostream>
#include <string>
using namespace std;

class Calculator
{
        private:
                float answer;
                float memory;
        public:
                float Add(float, float);
                float Subtract(float, float);
                float Multiply(float, float);
                float Divide(float, float);
                float GetAnswer();
                float GetMemoryNumber();
                void  SetMemoryNumber(float);
};

float Calculator::GetAnswer()
{
        return answer;
        int main();
}

float Calculator::GetMemoryNumber()
{
        return memory;
}
void  Calculator::SetMemoryNumber(float x)
{
        memory = x;
}
float Calculator::Add(float x,float  y)
{
        answer = (x+y);
}
float Calculator::Subtract(float x,float y)
{
        answer = (x-y);
}
float Calculator::Multiply(float x,float y)
{
        answer = (x*y);
}
float Calculator::Divide(float x,float y)
{
        answer = (x/y);
}

int main()
{
        Calculator calc;
        float x;
        float y;
string op;
string function;
std::cout <<"\n*Possible operations are: (+, -, *, / mem, clearmem, prime)*\n" << std::endl;
std::cout <<"Please enter function: " << std::endl;
std::cin >> op;
       
       
        if (op == "mem")
        {
std::cout << "\nMEM = " << calc.GetMemoryNumber() << std::endl;
std::cout << "\nEnter operation then second number or q to quit:\n";
std::cin >> op >> y;
        }
       
        else if (op == "setmem")
        {
std::cout << "\nEnter MEM = ";
std::cin >> x;
        calc.SetMemoryNumber(x);
std::cout << "MEM set to: " << calc.GetMemoryNumber() <<std::endl;
std::cout << "\nEnter operation then second number or q to quit:\n";
std::cin >> op >> y;
        }

       
        if (op == "+")
        {
        calc.Add(x,y);
        std::cout << "\nAnswer = " << calc.GetAnswer() << std::endl;
        }
       
        else if (op == "-")
        {
        calc.Subtract(x,y);
        std::cout << "\nAnswer = " << calc.GetAnswer() << std::endl;
        }

        else if (op == "*")
        {
        calc.Multiply(x,y);
        std::cout << "\nAnswer = " << calc.GetAnswer() << std::endl;
        }

        else if (op == "/")
        {
        calc.Divide(x,y);
        std::cout << "\nAnswer = " << calc.GetAnswer() << std::endl;
        }
       

return 0;

}

Hibát is ír:
1>d:\program\program2\számológép\számológép\szamologep.cpp(57) : error C4716: 'Calculator::Divide' : must return a value
1>d:\program\program2\számológép\számológép\szamologep.cpp(52) : error C4716: 'Calculator::Multiply' : must return a value
1>d:\program\program2\számológép\számológép\szamologep.cpp(47) : error C4716: 'Calculator::Subtract' : must return a value
1>d:\program\program2\számológép\számológép\szamologep.cpp(42) : error C4716: 'Calculator::Add' : must return a value


Előre is köszönöm.

A 4 függvényt úgy adtad meg, hogy float visszatérési értéket kellene adni, ezzel szemben nem tér vissza semmivel.

Ennek meg semmi értelme sincs:
float Calculator::GetAnswer()
{
        return answer;
        int main();
}

A return utáni rész már le sem fut, plusz ilyen nem létezik:
int main();

Raisen

#9
Én ezt nem értem :D Az ő számológépében mik azok a részek

Idézpublic:
                float Add(float, float);
                float Subtract(float, float);
                float Multiply(float, float);
                float Divide(float, float);
                float GetAnswer();
                float GetMemoryNumber();
                void  SetMemoryNumber(float);

És a további szövegekben nem is látom, hogyan tölt ezekbe valami számot pl

IdézCalculator calc;
        float x;
        float y;

Ezek előtte 1x szerepeltek és hol veszi fel az x értéket ? Másik kérdésem
Private és a public mi különbséget szolgál ? Az utolsó pedig
Idézusing namespace std;
ez nem arra szolgál elv, hogy std::-t ami parancs előtt kötelező lenne nem szükséges kirakni pl std::cout <- de az egészben használta ezeket a tagokat std::

Látom egy részénél Calculator::Add(x, y); <-De én ahol tartok úgy tudtam kell mindig a változónak adni egy opciót ami szerint eldönti mivel dolgozik o.O


▀█▀ █▀▀▄ █▀▀ █▀▀█ ▒█▀▀█ █▀▀█ █▀▀█ █░█ █▀▀█ █▀▀ █▀▀ ░ █░░█ █░░█
▒█░ █░░█ █▀▀ █░░█ ▒█▀▀▄ █▄▄█ █▄▄▀ █▀▄ █▄▄█ █░░ ▀▀█ ▄ █▀▀█ █░░█
▄█▄ ▀░░▀ ▀░░ ▀▀▀▀ ▒█▄▄█ ▀░░▀ ▀░▀▀ ▀░▀ ▀░░▀ ▀▀▀ ▀▀▀ █ ▀░░▀ ░▀▀▀

zerus

Idézetet írta: Raisen Dátum 2013 augusztus 03, 11:58:30 DÉLELŐTT
Én ezt nem értem :D Az ő számológépében mik azok a részek

Idézpublic:
                float Add(float, float);
                float Subtract(float, float);
                float Multiply(float, float);
                float Divide(float, float);
                float GetAnswer();
                float GetMemoryNumber();
                void  SetMemoryNumber(float);

És a további szövegekben nem is látom, hogyan tölt ezekbe valami számot pl

IdézCalculator calc;
        float x;
        float y;

Ezek előtte 1x szerepeltek és hol veszi fel az x értéket ? Másik kérdésem
Private és a public mi különbséget szolgál ?

Ez mind az objektumorientáltsághoz tartozik, amíg nem jutsz el odáig a könyvben, addig felesleges foglalkoznod vele.


Idézetet írta: Raisen Dátum 2013 augusztus 03, 11:58:30 DÉLELŐTT
Az utolsó pedig
Idézusing namespace std;
ez nem arra szolgál elv, hogy std::-t ami parancs előtt kötelező lenne nem szükséges kirakni pl std::cout <- de az egészben használta ezeket a tagokat std::

Igen, de attól nyugodtan lehet használni, problémát nem okoz.

Idézetet írta: Raisen Dátum 2013 augusztus 03, 11:58:30 DÉLELŐTT
Látom egy részénél Calculator::Add(x, y); <-De én ahol tartok úgy tudtam kell mindig a változónak adni egy opciót ami szerint eldönti mivel dolgozik o.O

Igen, ott egyik esetben sem kap értéket az x, y változó, de ezen kívül is nagyon sok hiba van a kódban.

Locutus

Igen. Internetről néztem ezt először c++ os weboldalról. Azt ahogy látom végül kiderült hogy hülyeség az egész. Nekiültem saját kezüleg ugyanezt megírni.
Álljon fel az ország imádandó széki!
Nemzetek, országok, hódoljatok néki!
Uralkodjék köztünk ész, érdem, igazság,
Törvény s egyenlőség, s te, áldott szabadság!

kagebunshin

Mivel jelezted, hogy ne írjunk megoldást ezért igyekszem csak minimális segítséget adni.

IdézGyök vonást nem tudom még hogy oldom meg(ötleteket szívesen fogadok)

Erre a 'Math' osztály használatát javaslom.

IdézAz osztásnál nem csak egész számok jönnek ki lehet float-al célszerűbb lett volna .

Itt pedig csak utalnék rá, hogy az osztásnál van még valami amit figyelembe kell venni. Bár lehet mire ezt olvasod már rá is jöttél :).

Sok sikert a továbbiakban.
"-Egy dolgot viszont elárulhatnál nekem. Ki találta ki, hogy a fák őreinek erejével szálljatok szembe velem, mert nem te ugye? Te nem tudtad!
-Nem... de azért vagyunk többen, hogy valaki tudja."

Powered by EzPortal