Zmienne i stałe w C++

4

1. Wstęp

Określenie zmienna, jak sama nazwa wskazuje, tyczy się obiektów, które można modyfikować w trakcie działania programu. Są nieodłączną częścią w zasadzie każdego programu. Szczególnie widać ich ważność w grach — tam, gdzie całość może zmienić się w ułamku sekundy. Zmienne są wydzielonym miejscem w pamięci. Posiadają swój typ, swoją nazwę, oraz przechowują dane. Nazwa może być niemal dowolna. Napisałem niemal, ponieważ nie wolno np. używać słów kluczowych (o tym za chwilę). W nazwach najlepiej używać liter, cyfr, oraz podkreślnika.

Czytaj dalej

Aktualizacje!

0

GBX Thumb Extractor

Wreszcie obiecywany GBX Thumb Extractor ujrzał światło dzienne. Prawie, bo niestety potrzebuje do działania kilku „składników”. Przede wszystkim wymagany jest program jpegtran.exe, który musi znajdować się w głównym katalogu programu, a oprócz tego ścieżka do pliku wyjściowego nie może zawierać spacji. W przeciwnym wypadku wynikowy obraz będzie odwrócony w pionie. No cóż, program jednak działa poprawnie.

Przede wszystkim zdecydowałem się na użycie interfejsu identycznego, jak w przypadku Duplicate Lines Finder’a, spora część kodu pochodzi też z tego programu. Jeszcze wspomnę o tym odwracaniu w pionie – jeżeli ktoś zna jakiś sposób na to odwracanie bez użycia zewnętrznych aplikacji, w C++ oraz współpracujący z kompilatorem MinGW32 – proszę o kontakt, nawet poprzez komentarz.

No, więc kończę tu opowiadanie o GBX Thumb Extractorze, żeby znowu nie wyszło jak z Duplicate Lines Finder’em i zapodaję link do progsa:

Link do programu GBX Thumb Extractor

SmsPrice 1.1

SmsPrice doczekał się aktualizacji. Zmiany są głównie kosmetyczne, można o nich poczytać w Changelog’u, ale usunąłem też trochę denerwujący błąd, który zawiesza program. Nie będę się tu rozpisywał, bo w zasadzie nie ma o czym, zapraszam do ściągnięcia najnowszej wersji:

Link do programu SmsPrice

Duplicate Lines Finder 1.1

No tak, wydałem GBX Thumb Extractor’a, zaaktualizowałem SmsPrice, możnaby się domyślać, że aktualizacji doczeka także Duplicate Lines Finder. Zgadza się.

Tu zmian jest więcej: przede wszystkim dodałem możliwość wyboru separatora – dzięki temu, jeżeli ciągi znaków są oddzielone np. spacjami, można w takim pliku także wyeliminować duplikaty. Dodałem także statystyki, dzięki którym dokładnie widać, ile zyskano miejsca, ile w pliku było duplikatów, oraz jak długo program wykonywał swoją operację. Dodałem dymki z informacjami, co dany przycisk lub coś innego robi. Wprowadziłem ignorowanie pustych linii a także wsparcie dla Windows’owego systemu kodowania – program mógł czasami nie działać, gdyż Windows nieco inaczej koduje znak nowej linii. O reszcie zmian można przeczytać w Changelog’u, a teraz po raz trzeci i ostatni w tym wpisie zarzucam link:

Link do programu Duplicate Lines Finder

Miłego używania! 😉

Premiera programu Duplicate Lines Finder

0

Witam ponownie bardzo nieliczne osoby czytające tegoż bloga.

Dziękuję, że czytając ten wpis zdobyłeś się na trud odwiedzenia strony. No, ale przejdę do rzeczy. W dniu dzisiejszym ogłaszam premierę programu którego ukończyłem. Zwie się on Duplicate Lines Finder, no i służy – jak nazwa wskazuje – do wyszukiwania zduplikowanych linii w plikach tekstowych, ich usunięciu, a następnie zapisie do nowego pliku.

Przed napisaniem tego programu sporadycznie zdarzało mi się, że potrzebowałem właśnie usunąć duplikaty w plikach tekstowych. Było to zadanie żmudne i nudne, więc napisałem ten program. Nie jest on szczególnie skomplikowany, gdyż jego główne okno składa się jedynie z dwóch etykiet, dwóch pól edycyjnych i trzech przycisków. Ale najważniejsze, że robi to, co ma robić i robi to bezbłędnie. Chyba. Niestety, ale obsługa plików kosztowała mnie ponad 400KB, doliczając kod oraz ikonę wyszło mi 491.

W moim komputerze – podam tylko procesor, gdyż on jest odpowiedzialny za zrealizowanie głównego zadania – mam procesor dwurdzeniowy Intel Core 2 Duo E8400 ~3GHz. Przetworzenie pliku o rozmiarze 296KB zajmuje około 3 sekundy, a program korzysta niestety tylko z jednego rdzenia. Lecz wyobraź teraz sobie, ile czasu zajęło by Ci to samo, robiąc to ręcznie… Sprawdzić, które z ponad 26 000 linii się powtarzają, i w ogóle zdecydować się na coś takiego to nie lada sztuka. Jestem pewien, że żaden z ludzi nawet nie zdecydowałby się na coś takiego, a nawet jeśli to zrezygnowałby już przy pierwszej linii…

Obsługa wersji 1.0 wygląda tak: uruchom program, wybierz plik źródłowy, wybierz plik docelowy, wciśnij przycisk, poczekaj i zamknij program. Każdy sobie z nią poradzi. Nasuwa się natomiast pytanie: czemu nie zaimplementowałem w programie paska postępu?
No cóż, chciałem, ale jak go zrobiłem, to długość procesu wzrosła z 3 do około 30 sekund… Coś dziwnie prockożerny ten pasek jest!

O, no popatrz, dotrwałeś do końca… Ciężko było, żebyś odwiedził ten blog, ale to, że przeczytałeś cały ten wpis jest już prawdziwym cudem… Kurde, ale się rozpisałem! No, ale teraz już zapodaję link do programu:

Link do programu Duplicate Lines Finder

Pozdro!

Premiera programu SmsPrice

0

Dziś wydaję program SmsPrice. Program ten służy do sprawdzania ceny, jaką zapłacimy wysyłając wiadomość SMS na podany numer usługi SMS Premium. Nie jest to może zbyt skomplikowana aplikacja… No, ale może komuś się przyda. Może.

Jest to natomiast moja pierwsza aplikacja stworzona w całości w WinAPI, bez używania wizualnej funkcji tworzenia okien dialogowych. Pisanie aplikacji w całości z poziomu kodu jest dużo trudniejsze, niż przy korzystaniu np. z Visual Studio, czy wxWidgets, ale wiąże się to z kilkoma zaletami.
– Nauka programowania w WinAPI
– Większa wiedza, co się w programie znajduje
– Mniejszy rozmiar wynikowego pliku
– Mniejsze zużycie zasobów systemowych (pamięć RAM)

Link do programu SmsPrice

No, ale już koniec o SmsPrice. Zapowiadany wcześniej GBX Thumb Extractor będzie musiał niestety poczekać, aż go przerobię z Visual Studio na WinAPI. No, a to może trochę potrwać, zwłaszcza, że muszę się zająć też aktualizacjami SmsPrice. Niedługo napiszę poradnik o zmiennych w C++. Nie pozostaje wam nic innego, tylko czekać, kolejne aktualizacje na blogu już wkrótce!

Funkcje matematyczne w C++, część II

1

1. Wstęp

Niniejszy wpis na tym blogu jest kontynuacją innego wpisu, który można znaleźć tutaj. Nie będę się więc zbytnio rozpisywał we wstępie, gdyż potrzebne informacje się tam znajdują.

2. Funkcje

2.1. Podstawowe funkcje trygonometryczne

Zostaną tu opisane trzy podstawowe funkcje trygonometryczne. Są to: sinus, cosinus i tangens. Jako argument przyjmują kąt, który należy podać w radianach.

double sin (double);
double cos (double);
double tan (double);

2.2. Sinus, cosinus i tangens hiperboliczny

Oprócz funkcji sin(), cos() i tan() istnieją także sinh(), cosh() i tanh(), które różnią się tym, że zwracają kolejno sinus hiperboliczny, cosinus hiperboliczny, oraz tangens hiperboliczny.

double sinh (double);
double cosh (double);
double tanh (double);

2.3. Arcus sinus, cosinus, tangens

Nie zabrakło również funkcji zwracających arcus sinus, arcus cosinus, oraz arcus tangens. Te funkcje to: asin(), acos(), atan().

double asin (double);
double acos (double);
double atan (double);

2.4. Zamiana stopni na radiany

Jak wiadomo, liczba π (PI) to 180°. Zamiana więc stopni na radiany będzie zatem bardzo prosta, i wygląda tak:

double stopnie;
cout << "Podaj kat w stopniach: ";
cin >> stopnie;
double radiany = (stopnie * M_PI) / 180.0f;
cout << "Kat " << stopnie <<
   " wyrazony w radianach wynosi " << radiany
   << "." << endl;

2.5. Logarytmy

Do obliczania logarytmów służą funkcje log() oraz log10(). Obie funkcje przyjmują po jednym parametrze, obie funkcje zwracają wynik, lecz funkcja log() oblicza logarytm naturalny, czyli o podstawie e, a log10() oblicza logarytm o podstawie 10.

double log (double);
double log10 (double);

Przykład:

double liczba;
cout << "Podaj liczbe: ";
cin >> liczba;
double logarytm = log(liczba);
double logarytm10 = log10(liczba);
cout << "Logarytm naturalny liczby " << liczba <<
   " wynosi " << logarytm <<
   ", a logarytm o podstawie 10 wynosi " << logarytm10
   << "." << endl;

2.6. Moduł (wartość bezwzględna)

Do obliczania modułu danej liczby służy funkcja fabs(). Przyjmuje 1 parametr, oraz zwraca wynik.

double fabs (double);

Przykład:

double liczba;
cout << "Podaj liczbe: ";
cin >> liczba;
double modul = fabs(liczba);
cout << "Modul liczby " << liczba << " wynosi " <<
   modul << "." << endl;

3. Zakończenie

W tych dwóch częściach opisu biblioteki math.h opisałem kilkanaście najważniejszych funkcji. Tych funkcji jest dużo więcej i można je znaleźć na innych stronach w internecie. Pomoc w języku polskim można znaleźć na przykład na Wikibooks.

Na tym kończę opis biblioteki math.h. Kolejne porady już wkrótce! Pozdro!

Funkcje matematyczne w C++, część I

1

1. Wstęp

C++ pod względem funkcji matematycznych jest bardzo bogato wyposażony. Korzystając z tego języka można stworzyć naprawdę zaawansowany kalkulator. I nie tylko! W tym wpisie postaram się przybliżyć kilka funkcji.

Zaawansowane funkcje matematyczne znajdują się w bibliotece math.h. Należy więc dołączyć tę bibliotekę:

#include <math.h>

2. Funkcje

2.1. PI i E

Na początek zacznę może od czegoś popularnego. Biblioteka math.h posiada 2 stałe, które pozwalają wyświetlić liczbę pi, oraz liczbę e. Stałe te zwą się M_PI, oraz M_E.

Przykład:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
   cout << "Wartosc  liczby PI wynosi: " << M_PI << endl;
   cout << "Wartosc liczby E wynosi: " << M_E << endl;
   return 0;
}

2.2. Zaokrąglanie liczb

Biblioteka math.h posiada 3 funkcje służące do zaokrąglania. Te funkcje to:

  • double round (double);
  • double ceil (double);
  • double floor (double);

2.2.1. Funkcja round()

Funkcja round() zaokrągla liczbę tak, jak w szkole. Jeżeli pierwsza liczba po przecinku jest większa lub równa 5, liczba jest zaokrąglana w górę, a w przeciwnym przypadku – w dół.

2.2.2. Funkcja ceil()

Funkcja ceil() zaokrągla liczby zawsze w górę. Więc liczba 0.01 będzie zaokrąglona do 1.

2.2.3. Funkcja floor()

Funkcja floor() zaokrągla liczby zawsze w dół. Więc liczba 0.99 będzie zaokrąglona do 0.

2.3. Potęgowanie liczb

Do potęgowanie służy funkcja pow(). Funkcja ta wymaga dwóch parametrów. Pierwszym z nich jest liczba, którą chcemy potęgować, drugim potęga, do której tą liczbę chcemy podnieść. Funkcja zwraca wynik.

double pow (double, double);
Przykład:
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
 double liczba, potega;
 cout << "Podaj liczbe: ";
 cin >> liczba;
 cout << "Podaj potege: ";
 cin >> potega;
 cout << "pow("<<liczba<<","<<potega<<")="<<pow(liczba,potega) << endl;
 return 0;
}

2.4. Pierwiastki

2.4.1 Pierwiastek stopnia drugiego

Do obliczania pierwiastka drugiego stopnia służy funkcja sqrt(). Funkcja przyjmuje za argument liczbę, którą chcemy pierwiastkować.

double sqrt (double);

Przykład:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
   double liczba;
   cout << "Podaj liczbe: ";
   cin >> liczba;
   cout << sqrt(liczba) << endl;
   return 0;
}

2.4.2. Pierwiastek dowolnego stopnia

Obliczanie pierwiastka dowolnego stopnia oblicza się tak, jak potęgowanie, z tą różnicą, że jako potęgę podaje się iloraz liczb 1 i stopnia pierwiastka. Wszelkie wątpliwości powinien rozwiać poniższy przykład:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
   double liczba, stopien;
   cout << "Podaj liczbe: ";
   cin >> liczba;
   cout << "Podaj stopien pierwiastka: ";
   cin >> stopien;
   cout << pow(liczba, 1/potega) << endl;
   return 0;
}

3. Kilka słów na koniec

Przy korzystaniu z funkcji matematycznych, należy przede wszystkim myśleć jak matematyk, a nie informatyk. Trzeba na przykład pamiętać, że pierwiastek z liczby ujemnej nie istnieje. Myśląc jak matematyk unikniesz później błędów, oraz nerwów.

Jak można się domyślić z tytułu wpisu, nie jest to koniec opisu funkcji matematycznych w C++ na tym blogu. Kolejne części już wkrótce. Jest o czym pisać: moduł liczby, logarytm, sinus, cosinus, tangens, oraz wiele innych. Do zobaczenia!

Zapowiedź programu GBX Thumb Extractor

0

Program GBX Thumb Extractor, który jest tematem tego wpisu, zapewne ucieszy fanów gry TrackMania, a zwłaszcza mapperów, gdyż program ten ma za zadanie wyciągać miniaturki z plików .Challenge.Gbx.

Istnieją programy do wyświetlania tych miniaturek, lecz nie spotkałem jeszcze programu, który by je zapisywał. Przewidziałem na razie, iż wersja 1.0 będzie je tylko wyciągać, natomiast następne wersje będą potrafiły je także zmieniać. Przewiduję też rozszerzenie powłoki systemowej (dodanie pozycji „Wypakuj miniaturę” do menu kontekstowego dla plików .Gbx).

Nie pozostaje Wam więc nic innego tylko czekać! GBX Thumb Extractor już wkrótce!

Hello, world!

0

Witajcie wszyscy internauci, którzy zdobyli się na ten trud i odwiedzili mój blog.

Co na tym blogu będzie?
Interesuję się informatyką, więc można by się domyślać, że jego temat będzie zgodny z moimi zainteresowaniami.

Otóż jest to prawidłowa odpowiedź.
Zamierzam umieszczać tutaj głównie aplikacje, które napisałem. Można też liczyć na garść porad dotyczących przede wszystkim programowania. Tak więc, jeżeli interesujesz się informatyką, a zwłaszcza programowaniem, to myślę, że odwiedzając ten blog nie trafiłeś najgorzej.

Na koniec pozdrawiam, oraz zapraszam do częstych odwiedzin!