Forum poświęcone PHP

Posted by NET  • 

[Newbie] [C++] Zabezpieczenie przed utworzeniem obiektu
Mam taki kod: class A { }; class B : public A { }; Czy da się zrobić tak, aby w programie nie można było utworzyć obiektu klasy A?
Sun,04 Jan 2009 01:42:01 +0100

[Newbie] [Delphi] Przerwanie wyszukiwania...
witam mam banalny problem ale jakos nie potrafie sobie z nim poradzic [glowa] [wstyd] chodzi o to, ze w programie mam wyszukiwanie w czasie rzeczywistym: jak tylko zaczynam cos wpisywac do edita to wyszukiwane sa odp rzeczy. problem w tym, ze jesli wyszukiwanie trwa a ja cos zmienie w edicie to wyszukiwanie ma zostac przerwane a nast rozpoczete na nowo. no i wlasnie z tym mam problem, z zatrzymaniem i jednoczesnym rozpoczeciem nowego. help [glowa] dzieki z gory
Sun,04 Jan 2009 01:23:45 +0100

[Newbie] [C++]Pomoc w rozpracowaniu kodu
Witam :) Chciałbym prosić o pomoc w rozpracowaniu kodu programu. Jest to saper napisany poprzez tablice dwuwymiarowe, których wartości ja zdefiniowane globalnie. Program znalazłem w zwykłym C i przerobiłem go na polskie określenia oraz na język c++. Powyrzucałem też nieco zbędnych linijek kodów zastępując łatwiejszymi rozwiązaniami oraz wprowadziłem generator losowych bomb ;) Generalnie rzecz biorąc rozumiem co nieco funkcji, ale chciałbym się upewnić co do moich domysłów. #include "stdafx.h" #include #include #include #include using namespace std; const int lw=7; const int lk=7; const int lb=1; int tab_bomb[lw][lk]; int tab_krycie[lw][lk]; int otoczenie_bomb[lw][lk]; int pozostale_pola; int Zaleznosc(int wiersz, int kolumna) //do sprawdzenia poprawnosci wprowadzonych wspolrzednych { return wiersz>=0 && wiersz=0 && kolumna
Sun,04 Jan 2009 01:14:49 +0100

[Newbie] [C] dwuwymiarowa tablica char
Mam mały problem, tworzę dynamicznie tablice dwuwymiarowa char i chcę do niej wpisywać wyrazy gdzie w każdym wierszu będzie inny, a gdy wcisnę 0 to się wpisywanie zakończy. Ilości wyrazów jakie zostaną wpisane do tablicy nie znam więc używam zmiennej ilosc_wyrazow jako licznika ich. I mój problem jest następujący nie wiem gdzie wsadzić licznik wyrazów aby je zliczał oraz aby dobrze się tekst kopiował do tablicy dwuwymiarowej z tablicy pomocniczej. #define DLUGOSC_WIERSZA 50 int ilosc_wyrazow = 1 ; char tab_pomocnicza[50] ; tablica = (char**)malloc(DLUGOSC_WIERSZA * sizeof(char*)); for(i = 0; i < DLUGOSC_WIERSZA; ++i) { tablica[i] = (char*)malloc(ilosc_wyrazow * sizeof(char)); scanf("%s", tab_pomocnicza) ; if(tab_pomocnicza[0] == '0') { break ; } strcpy(tablica[i], tab_pomocnicza) ; } Jak narazie doszedłem do tego i kod mi wybucha, w grę wchodzi tylko ANSI C
Sun,04 Jan 2009 01:12:31 +0100

[C/C++] [C++] szablony, dziedziczenie prywatne i szalone problemy
Problem to pewnie wina złych pomysłów... Ale w skrócie, mam klasę bazową będącą teoretycznie robolem oraz klase niby interfejsu wyższego poziomu. Obie te klasy to szablony. Trudno opisać cały ten bałagan, w każdym razie kod przykładowy wygląda tak: template class BaseW { protected: T work(T a, T b) { /*tu żyją smoki*/}; public: BaseW(){/*tu składają jaja smoki*/}; ~BaseW(){/*tu giną smoki*/}; } template Class WHorse: private BaseW { protected: typedef T (BaseW::*wrk)(T,T); map workers; public: WHorse() { workers['a']=BaseW::work; //
Sun,04 Jan 2009 00:00:25 +0100

Liczby całkowite (integer)

Liczby całkowite (integer)

Typ integer to liczba całkowita, należąca do przedziału Z = {..., -2, -1, 0, 1, 2, ...}.

Zobacz też: Liczby całkowite dużej wielkości oraz Liczby zmiennoprzecinkowe

Składnia

Liczby całkowite mogą być zapisane w notacji dziesiętnej (opartej na 10), szesnastkowej (opartej na 16) lub ósemkowej (opartej na 8), opcjonalnie poprzedzone znakiem (- lub +).

Aby zapisać liczbę w notacji ósemkowej, należy poprzedzić właściwą liczbę symbolem 0 (zero). W notacji szesnastkowej liczbę należy poprzedzić symbolem 0x.

Przykład 11-1. Notacja liczb całkowitych

$a = 1234; # liczba dziesiętna
$a = -123; # ujemna liczba dziesiętna
$a = 0123; # liczba ósemkowa (odpowiednik dziesiętnej 83)
$a = 0x1A; # liczba szesnastkowa (odpowiednik dziesiętnej 26)
Maksymalna wielkość liczby całkowitej jest zależna od platformy operacyjnej, zwykle jest to około dwa miliardy (jest to 32 bity ze znakiem). PHP nie obsługuje liczb całkowitych bez znaku.

Wyjście poza zakres liczb całkowitych

W przypadku zapisania liczby całkowitej wykraczającej poza zakres typu integer, liczba ta zostanie potraktowana jako typ float. Również jeśli rezultat operacji będzie wykraczał poza typ integer, jako wynik zostanie zwrócony typ float.

$duża_liczba =  2147483647;
var_dump($duża_liczba);
// wynik: int(2147483647)

$duża_liczba =  2147483648;
var_dump($duża_liczba);
// wynik: float(2147483648)

// tak samo dzieje się przy wartościach szesnastkowych:
var_dump( 0x80000000 );
// wynik: float(2147483648)

$million = 1000000;
$duża_liczba =  50000 * $million;
var_dump($duża_liczba);
// wynik: float(50000000000)

Ostrzeżenie

Niestety, błąd w PHP powodował czasem nieprawidłową pracę z liczbami ujemnymi. Na przykład: wynikiem działania -50000 * $million była liczba -429496728. Błąd ten pojawiał się tylko przy liczbach ujemnych i nie dotyczył wartości dodatnich.

Powyższy problem został rozwiązany w PHP 4.1.0.

W PHP nie ma operatora dzielenia całkowitego. 1/2 daje wynik typu float o wartości 0.5.

var_dump( 25/7 );
// wynik: float(3.5714285714286)

Konwersja na liczby całkowite

Do jawnej konwersji wartości na typ integer używa się operatora rzutowania (int) lub (integer). W większości przypadków jednak rzutowanie nie jest potrzebne, gdyż wartość zostanie skonwertowana automatycznie, o ile operator, funkcja lub struktura kontrolna wymaga argumentu typu integer.

Zobacz też wykorzystywanie typów danych.

Z boolowskiej

FALSE będzie mieć wartość 0 (zero), a TRUE będzie mieć wartość 1 (jeden).

Z liczb zmiennoprzecinkowych

Przy konwersji z liczb zmiennoprzecinkowych do całkowitych, liczba zostanie zaokrąglona w dół.

Jeśli liczba zmiennoprzecinkowa jest poza zakresem liczb całkowitych, (zwykle +/- 2.15e+9 = 2^31), wynik operacji rzutowania jest niezdefiniowany, ponieważ liczba zmiennoprzecinkowa nie ma odpowiedniej precyzji, aby zwrócić dokładną liczbę całkowitą. W tej sytuacji nie pojawi się żadne ostrzeżenie ani informacja odnośnie powstałego błędu!

Ostrzeżenie

Nigdy nie należy rzutować nieznanego ułamka do typu integer, gdyż może to doprowadzić do otrzymania nieprzewidywalnych wyników.

echo (int) ( (0.1+0.7) * 10 ); // wyświetla 7!

Więcej informacji na ten temat w rozdziale precyzja liczb zmiennoprzecinkowych.

Z innych typów

Uwaga!

Wynik konwersji do liczb całkowitych z innych typów jest nieokreślony. Obecnie zachowanie jest takie samo, jakby zmienna została najpierw skonwertowana do typu boolowskiego. Nie należy jednak polegać na tym zachowaniu, gdyż może ono ulec zmianie bez żadnego ostrzeżenia.