[C++] potęgi/mnożenie/? początki huh


(SolelyRose*) #1

Z programowaniem zaczynam tak jak teraz z tym tematem, proszę o mocno szczegółową pomoc.

Moim zadaniem jest napisanie trzech programów w C++, sam używam kompilatora Dev-C++ 4.

Pierwszy program sam zrobiłem, typu "Hello World!" :wink: zawsze coś.

Oczywiście już na następnym się zatrzymałem. Otóż program ten ma wczytywać liczbę i podnosić ją do potęgi 4.

Niby proste, ale nie wiem.. :roll:

Następny program ma obliczyć 4*x-7*y+6.

Ostatni to już dla mnie czarna magia. Muszę napisać program w którym zadeklaruje zmienne różnego typu i ma się wyświetlić w ile miejsca w pamięci zajmują zmienne :?

Czy ktoś mógłby wytłumaczyć jak mam to zrobić, ważniejsza rzecz, żebym to zrozumiał i następnym razem nie musiał pytać [-o<


(system) #2

No to tak - ile miejsca zajmują zmienne, to poczytaj o sizeof() :slight_smile: Mała podpowiedź: jak zadeklarujesz zmienna, np. int a; to zeby wyswietlic ile zajmuje pamięci, to np. cout << sizeof(a) << endl; :slight_smile:

Jeśli chodzi o ten wzór (4*x-7*y+6), to nic prostszego. Wystarczy zadeklarować zmienne x i y, np typem int (int x, y;), a potem wysiwetlic sobie, oczywiscie po pobraniu (cin >> x; cin >> y): cout << 4*x-7*y+6 << endl; (tak ja myslę). A jeśli o potęgę chodzi, to najprostszy sposób, jeśli jesteś początkującym, to:

#include 


using namespace std;


int main()

{


    int liczba;


    cin >> liczba;


    cout << liczba*liczba*liczba*liczba << endl;

    cin.ignore();

    getchar();


}

Oczywiście można to za pomocą pętli zrobić jeszcze itd, ale na początek wystarczy :slight_smile: Ja mam nadzieję, że zrozumiałeś wszystko :slight_smile:


(SolelyRose*) #3

zacznijmy od podniesienia do potęgi, zrobiłem tak jak napisałeś, ale jest 1 błąd, pomyślałem, że przez getchar (); brakuje czegoś, więc wpisałem int , no i zadziałało :slight_smile: .

Co do działania, to jak to powinno właśnie wyglądać, gdzie deklarować x i y ? i jako co, jako np. char, czy np: y:=4 Nie rozumiem. Wyszło mi:

#include 

              using namespace std;

              int main ()

              {

                     int x,y;

                     cin >> x; cin >> y;

                     cout << 4*x-7*y+6 << endl;


                     }

(system) #4

No ten twój kod:

#include 

              using namespace std;

              int main ()

              {

                     int x,y;

                     cin >> x; 

                     cin >> y;

                     cout << 4*x-7*y+6 << endl;


              }
  • właśnie o to mi chodziło, tylko zadbaj może o estetykę :smiley: Ale to szczegół. No i żeby ci się od razu nie wyłączył program, warto dać na końcu (po cout) cin.ignore(); getchar(); (tylko może w osobnych linijkach xD, nie tak jak cin'y). Ale ogólnie o to mi chodzilo :slight_smile: A, i jeśli chcesz liczbę, to najlepiej int, a jeśli zmiennoprzecinkową to double :slight_smile: I operator := jest Pascal'owy.

(flaszer) #5

Co do podnoszenia do potegi, to masz specjalną funkcję pow() lub Math.pow() - nie pamiętam :smiley: Przyjmuje ona dwa parametry, liczbę, którą podnosisz oraz potęgę. Np. int liczba = pow(2, 3); zwroci 16.


(system) #6

No według mnie, to pow przyjmuje tylko jeden parametr, którym jest liczba (zmienna), którą chcesz podnieść do kwadratu (potęgi 2). Funkcja pow nie podniesiesz raczej do innej potęgi niż do 2 :slight_smile: (Nagłówek math.h)

edit:

fakt, sorry, za pomocą pow można podnieść do potęgi podanej w drugim argumencie :slight_smile: Moja wina xD


(Fiołek) #7

Co do kodów kolegów wyżej to mam kilka zastrzeżeń.

Jeśli użyszkodnik nie poda liczby(tylko tekst), program poda zły wynik.

Do potęgowania lepiej nie używać pętli bo to będzie wolniejsze(co prawda tu to roli dużej nie gra, ale to taka uwaga na przyszłość) :wink:


(system) #8

Fiołek - wiem, że poda zły wynik, ale ja tylko odpowiedziałem na pytanie, jak to zrobić xD Ale spoko :slight_smile: I to prawda, z pętlą było by wolniejsze, ale nie uważasz, że jak narazie user'owi pytającemu :smiley: nie robi to różnicy xD


(SolelyRose*) #9

No porządek też ważny.

Ostatecznie skompilowało tak:

to jest już dobrze, tak?

Zostało mi jeszcze ostatnie.

O co chodzi z tymi zmiennymi o różnych typach?

Dobrze to zrozumiałem?

#include 

              using namespace std;

              int main ()

              {

           int a;

           char b;

           cout << sizeof(a) << endl;

           cout << sizeof(b) << endl;

           cin.ignore();

           int getchar();

                }

(system) #10

No zrozumiałeś dobrze. Zmienne o różnych to zmienne, które różnią się typami xD Inaczej tego nie umiem wytłumaczyć xD Np. int a; to jest zmienna typu liczbowego, a char b; to zmienna typu "znakowego" xD Tylko teraz wytłumacz ty mi coś. PO CO DAŁEŚ PRZED getchar(); INT?


(SolelyRose*) #11

tak się nie robi? Nie będzie działać?

Zrobiłem to bez większego pojęcia, ale bez tego nie chce mi się skompilować a z tym nie ma błędów.

wiem, uczyłem się go dawno.


(system) #12

Zamiast getchar() użyj cin.get(); bowiem nie należy mieszać odczytu synchronicznego z asynchronicznym. Co do podnoszenia do potęgi w pętle to będzie o wiele szybciej niż użycie pow().

A do podnoszenia do potęgi czwartej najszybsza metoda to przez dodatkową zmienna.

int a=10,b=a*a,c=b*b;

(SolelyRose*) #13

chciałbym jednak nie uczyć się na "prawie dobrych programach" jak to powinno wtedy iść?


(system) #14
#include 

#include // w niektórych kompilatorach bez .h 

using namespace std;


int main ()

  {

   double x,y; // w podanej funkcji x i y nie koniecznie muszą być liczbami całkowitymi, więc int nie pasuje

   cout<<"podaj x oraz y: ";

   cin>>x>>y;

   if(cin)

     {

      cout<<"przy x="<
     }

   else

     {

      cin.clear(); // jeżeli po tym else program się kończy to ten wiersz nie jest potrzebny, ale nie pod windowsami

      cin.ignore(INT_MAX,'\n'); // to samo co wyżej

      cout<<"Blad wprowadzenia danych"<
     }

   cin.get(); // tylko pod windowsami, ponieważ po zakończeniu programu windowsy natychmiast zamykają okienko

   return 0; // koniecznie inaczej system otrzymuje złą informacje o trybie zakończenia programu

  }