Prosty program w C++

M1DN1GH7'

Użytkownik
Dołączył
Maj 14, 2010
Posty
6
Napisałem program, taki mały kalkulator i mam kilka pytań.
1. Co muszę zrobić żeby program można było zresetować bez wychodzenia z niego?
2. Czy jest jakiś lepszy sposób żeby potęgować liczbę?
3. Jaki wzór muszę napisać żeby program pierwiastkował?
4. Jak jeszcze bardziej zwiększyć zbiór liczb?

Kod:
#include <iostream>
#include <conio.h>
using namespace std;

main ()
{
cout<<"Maksymalna wartosc liczb wynosi 1'000'000'000"<<endl;
cout<<"Dostepne dzialania: "<<endl;
cout<<"'+'-dodawanie 'a' i 'b'"<<endl;
cout<<"'-'-odejmowanie 'a' i 'b'"<<endl;
cout<<"'*'-mnozenie 'a' i 'b'"<<endl;
cout<<"'/'-dzielenie 'a' i 'b'"<<endl;
cout<<"2-5-potegowanie liczby 'a'"<<endl;
cout<<"'p'-mnożenie liczby 'a' przez liczbe pi"<<endl;
cout<<"'%'-procent liczby 'a' z liczby 'b'"<<endl;
cout<<endl;

long double a,b,d;
cout<<"Liczba a : ";
cin>>a;

char c;
cout<<"Dzialanie: ";
cin>>c;

cout<<"Liczba b : ";
cin>>b;

     if(c=='+')
     {
               d = a+b;
     }
     if(c=='-')
     {
               d = a-b;
     }
     if(c=='*')
     {
               d = a*b;
     }
     if(c=='/')
     {
               d = a/b;
     }
     if(c=='2')
     {
               d = a*a;
     }
     if(c=='3')
     {
               d = a*a*a;
     }
      if(c=='4')
     {
               d = a*a*a*a;
     }
      if(c=='5')
     {
               d = a*a*a*a*a;
     }
     if(c=='p')
     {
               d = a*3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
     }
     if(c=='%')
     {
               d = 100*a/b;
     }
     cout<<"Wynik: "<< d <<endl;
     
getch();
return(0);
}

//made by M1DN1GH7'

Proszę o wstrzymanie sie z krytyką, dopiero zaczynam.
 
Ostatnia edycja:

D.F.

Były Moderator
Dołączył
Listopad 4, 2009
Posty
493
Wszystko wyżej zostało napisane, dorzucę tylko, że do potęgi dowolnego stopnia masz funkcję pow.
 

M1DN1GH7'

Użytkownik
Dołączył
Maj 14, 2010
Posty
6
Dzięki Discovery, ale to co napisałeś w ad.1 to jednak nie o to mi chodziło, "cls" czyści okno, a chciałem żeby program powrócił do stanu tak jak tuż po uruchomieniu.

Kod:
(...)
     cout<<"Wynik: "<< d <<endl;
system("cls");
getch();
return(0);
}

Jeśli chodzi o ad 4, to int mi sie nie przyda bo to tylko liczby całkowite.
A ad.2 nie do końca rozumiem, jak co i gdzie wpisać.
 

discovery44

Były Moderator
Dołączył
Sierpień 14, 2007
Posty
763
Kod:
#include <iostream>
#include <stdlib.h>
using namespace std;
// potegi //
int pot(int x){return x*x;}
////////////
int main()
{
poczatek:
    cout << "key" << endl;
   getchar();
   cout << "czekaj..." << endl;
    Sleep(5000);
    cout << "wpisz liczbe... ";
int dig;
cin >> dig;
if(dig == 1)
{
system("cls");
goto poczatek;
}
else
{
cout << "Potegowanie:$~ " << dig << " <-> *** " << pot(dig) << " ***" << endl;
}
getchar();
}
Kod zagmatwany.
 
Ostatnia edycja:

M1DN1GH7'

Użytkownik
Dołączył
Maj 14, 2010
Posty
6
Kod zagmatwany.

Dzięki :) z czasem jakoś do tego dojdę, a Symfonię C++ i tak miałem kupić bo na forum już była gdzieś polecana. Na razie dodałem pierwiastkowanie i czytam o kwadracie. Mój pierwszy program ktory przed wczoraj napisalem to byl kalkulator na 4 działania, ;D ale tak dostałem 6. Jak co to chodzę do gimnazjum.

A, wyskoczył mi błąd przy wierszu
Kod:
    Sleep(5000);
Nie wiem czy kompilator ma znaczenie ale używam Dev-C++ 4.9.9.2
 
Ostatnia edycja:

cyber_pl

Użytkownik
Dołączył
Wrzesień 30, 2009
Posty
187
Kod:
Sleep(5000);

Ta funkcja jest zdefiniowana w kernel32.dll czyli w programie musisz dodac naglowek winapi.

Kod:
#include <windows.h>
 

Gelio

Użytkownik
Dołączył
Kwiecień 26, 2008
Posty
33
Tak jakby co, dam może coś łatwiejszego.

Ad. 1
To, co napisali wyżej, czyli
Kod:
getch();  // zatrzymuje program do naciśnięcia dowolnego klawisza
system("cls"); // resetuje konsole
Dodatkowo obejmij całą funkcję main, ale bez returna pętlą while, której deklaracja ma wyglądać tak:
Kod:
while(true)
{
//kod
}
Nie zapomnij na początku dodać tylko:
Kod:
#include <conio.h>

Ad. 3
Musisz zaimportować bibliotekę math, czyli:
Kod:
#include <math.h>
A potem użyć funkcji:
Kod:
sqrt(x);
Gdzie x to liczba, której pierwiastek chcesz uzyskać.

Ad. 4
Nie wiem czy to coś da, ale typ zmiennej long long. Może się uda, a jak nie, to wyjdzie zwykły long.


To tyle ode mnie. Mam nadzieję, że opisałem trochę mniej chaotycznie niż Ci wyżej.
 
Ostatnia edycja:

5.56

Użytkownik
Dołączył
Luty 1, 2010
Posty
102
Nie zapomnij na początku dodać tylko:
#include <conio.h>
czyt."Nie zapomnij na początku dodać tylko biblioteki,która jest zupełnie niepotrzebna"
I jedna wielka uwaga - ^ w zapisie i owszem,to jest programowanie,ale to NIE JEST POTĘGOWANIE W C!To XOR,co z np.5^2 zamiast 25 da bodajże 6.
I rozwinę odrobinkę punkt o pętli - to akurat dobry pomysł, tyle że samo "tru" nie załatwi sprawy - tj.pod couty(nie znam się w 100% na cpp,ale mam wrażenie że wszystkie << mogą podlegać po jeden cout,tj.zamiast wielokrotnego wywoływania tej samej funkcji wywoływałbyś raz,*tu wstaw pierdoły o oszczędności pamięci i czasu procesora*) dopisałbyś np. "cout << "q - wyjscie z programu",a pod ify(do jednej instrukcji nie potrzeba klamerek ;x) dorobił odpowiednią wersję dla "q" i np.ExitProcess jak już include'ujesz windows.h
 

Gelio

Użytkownik
Dołączył
Kwiecień 26, 2008
Posty
33
czyt."Nie zapomnij na początku dodać tylko biblioteki,która jest zupełnie niepotrzebna"
Twierdzisz, że funkcja getch() to jest wbudowana w którąś z innych bibliotek aktualnie dołączonych? Wątpię.

Ale co do potęgowania to masz racje, jednak się myliłem.
 

5.56

Użytkownik
Dołączył
Luty 1, 2010
Posty
102
getch jest akurat w tej borlandowskiej bibliotece, ale już np.getchar(co robi zupełnie to samo) jest w stdio.h ;>
@edit:ale że jesteśmy fajni i poruszamy się w czasach przeciążonych operatorów,to przecież cin ma fajną metodę,nawet wersję bez argumentów!
 
Ostatnia edycja:

cyber_pl

Użytkownik
Dołączył
Wrzesień 30, 2009
Posty
187
Kod:
conio.h: int getch(void);
stdio.h: extern int getchar __P((void));

nie oplaca sie wydobywac stara funkcje conio.h lecz juz ta w standardzie jezykowym jezyka c, pozatym nie zawsze ten naglowek conio.h jak i biblioteka statyczna kodu wystepuje ...
 

M1DN1GH7'

Użytkownik
Dołączył
Maj 14, 2010
Posty
6
Jeśli chodzi o potęgowanie to wiem już zrozumiałem prawie cały kod Discoverego, ale w raz nie o to mi chodziło z tym potęgowaniem. Idzie mi o to, że jeśli są liczby 'a' i 'b' to żeby 'a' była liczbą a 'b' jej wykładnikiem, czyli 'a' do potęgi 'b', nie wiem jak to zapisać... Program teraz wygląda tak:
Kod:
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;

main ()
{
     s:
cout<<"Dostepne dzialania: "<<endl
<<"'+'-dodawanie 'a' i 'b'"<<endl
<<"'-'-odejmowanie 'a' i 'b'"<<endl
<<"'*'-mnozenie 'a' i 'b'"<<endl
<<"'/'-dzielenie 'a' i 'b'"<<endl
<<"'^'-liczba 'a' do potegi 'b'"<<endl
<<"'r'-pierwiastek liczby 'a'"<<endl
<<"'p'-mnożenie liczby 'a' przez liczbe pi"<<endl
<<"'%'-procent liczby 'a' z liczby 'b'"<<endl
<<endl;

long double a,b,d;
cout<<"Liczba a : ";
cin>>a;

char c;
cout<<"Dzialanie: ";
cin>>c;

     if(c=='+')
     {
               cout<<"Liczba b : ";
               cin>>b;
               d = a+b;
     }
     if(c=='-')
     {
               cout<<"Liczba b : ";
               cin>>b;
               d = a-b;
     }
     if(c=='*')
     {
               cout<<"Liczba b : ";
               cin>>b;
               d = a*b;
     }
     if(c=='/')
     {
               cout<<"Liczba b : ";
               cin>>b;
               d = a/b;
     }
     if(c=='^')
     {
               d = a*a;
     }
     if(c=='r')
     {
               d = sqrt (a);
     }
     if(c=='p')
     {
               d = a*3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
     }
     if(c=='%')
     {
               cout<<"Liczba b : ";
               cin>>b;
               d = 100*a/b;
     }
     cout<<"Wynik    : "<< d <<endl;
getch();  
system("cls");
goto s;
return(0);
}

//made by M1DN1GH7'
Potęgowanie w raz zapisałem w postaci "wynik = a*a", ponieważ mogę tak potęgować ułamki. Gdzieś czytałem, że conio.h obsługije klawiaturę(chce zrobić tak żeby [Esc] zamykał program, na razie o tym czytam, ale skoro ta biblioteka jest związana z klawiaturą to czy przy jej pomocy nie można by napisać keyloggera??
 
Ostatnia edycja:

discovery44

Były Moderator
Dołączył
Sierpień 14, 2007
Posty
763
Kod:
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
  double liczba,potega;
  cout<<"Podaj liczbe: ";
  cin>>liczba;
  cout<<"Do ktorej potegi podniesc liczbe "<<liczba<<"? Wpisz wartosc: ";
  cin>>potega;
  cout<<"pow("<<liczba<<","<<potega<<")="<<pow(liczba,potega)<<endl;
  getch();
  return(0);
}
http://kursy.ddt.pl/?LessonId=16

Kod:
#include <windows.h>
int main()
{
while(1)
{
if(GetAsyncKeyState(VK_ESCAPE)) MessageBox(0, "esc", "title", 0);
Sleep(10);
}
}
 
Ostatnia edycja:

RobertG

Użytkownik
Dołączył
Styczeń 3, 2007
Posty
391
Gwoli ścisłości, pierwiastkowanie to podnoszenie do potęgi 1/2, więc możesz pierwiastkować korzystając z pow():

Kod:
    std::cout << pow(2.0, 0.5) << std::endl;
    std::cout << sqrt(2.0) << std::endl;
 
Ostatnia edycja:

M1DN1GH7'

Użytkownik
Dołączył
Maj 14, 2010
Posty
6
OK, dzięki za pomoc. skończyłem już program, dałem do sprawdzenia nauczycielowi i dostałem celujący :) no i najważniejsze jest to, że coraz więcej umiem, wiem że to może nie do końca zgodne z tematem, ale czego powinienem się teraz uczyć? dalej studiować matematykę czy znaleść coś innego? Jeśli tak to co proponujecie?
 

hxv

Były Moderator
Dołączył
Sierpień 9, 2006
Posty
797
Ja bym proponował najpierw skończyć gimnazjum. Myślenie w tym momencie o studiach to lekka przesada. Naucz się porządnie programować, za parę lat sam będziesz wiedział co dalej robić.
 
Do góry Bottom