Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne]Który język wybrać?
Forum PHP.pl > Inne > Hydepark
Stron: 1, 2
Jabol
Nie ma czegoś takiego jak konwersja z char na float. A raczej jest, ale na pewno nie o to Ci chodzi. strtof?

Zrobiłeś to teraz za pomocą wyrażeń regularnych, prawda? A ja naprawdę chciałem Ci pomóc nauczyć się programowania w C++...
sztosz
http://www.google.com/search?hl=en-GB&...=char+to+float+

Pierwszy wynik który mi się pojawił. http://forums.devshed.com/c-programming-42...t-c-297350.html

Uwierz że pisanie w C++ czy innym "topowym" języku programowania to czysta przyjemność jeśli się wie co chce się napisać.
thek
Standardowa biblioteka C: funkcje typu XtoY, gdzie x to tym wejściowy, a Y - wyjściowy. Do wyboru:
a - znak,
i - liczba całkowita,
f - liczba zmiennoprzecinkowa.
Pamiętaj, że nie ma sensu konwertować między całkowitymi i zmienoprzecinkowymi. Wystarczy jawne rzutowanie typów z podaniem w nawiasach typu wynikowego. Rzutowanie między char i int zwróci (w zależności od kierunku) albo kod znakowy liczby w ascii, albo znak ascii o danym kodzie. Stąd właśnie konwersje w której bierze udział char to osobne funkcje
chlebik
Cytat(thek @ 7.09.2009, 00:48:46 ) *
Niestety JVM i jej GarbageCollector nie zawsze działają prawidłowo, a po dłuższej intensywniejszej pracy jakiejś kobyłki, gdzie programista nie dba sam o zwalnianie pamięci tylko zdaje się na GC, potrafi wyciec mnóstwo pamięci.


A jak przepraszam ma programista dbac o zwalnianie pamieci? Bo wiesz, SCJP zdaje za kilka dni i chcialbym wiedziec, a jakos nigdzie ani w podreczniku do SCJP, ani w 'Thinking in Java' nie znalazlem na ten temat wzmianki. Ja naprawde nie ironizuje.
mike
Cytat(chlebik @ 8.09.2009, 15:58:34 ) *
A jak przepraszam ma programista dbac o zwalnianie pamieci?
To bardziej chodzi o styl programowania i dbanie o niektóre rzeczy samemu.
Na przykład czasem jakieś obiekty mogą utknąć Ci w mapach, nawet jak nie masz do nich referencji. Tak się tylko wydaje bo sama mapa trzyma referencję dlatego obiekt gubi się w mapie.
I albo sam go wyrzucisz lub "znullujesz" albo użyjesz WeakHashMap, która zwalnia obiekty dla GC jeśli tylko ona do nich referuje.
To przykład jeden z wielu.
thek
Chodzi mi o sytuacje, gdy kompletnie zaniedbujesz sprawę przydzielania pamięci dla obiektach (niestety takich programistów na studiach też poznałem). Najbezpieczniej obiekt którego już nie używamy nadpisać poprzez nadanie mu wartości null. Wtedy na pewno pamięć nadana obiektowi zostanie zwolniona. Nie ma co zdawać się na GC, bo zdarza mu się czasem zawodzić i może za sobą zostawić coś w pamięci. Im nowsza wersja Javy tym działa on lepiej i sprawniej, ale nie warto mu ufać w 100% bo przy jakimś dużym projekcie może to wyjść. Lepiej chuchać na zimne smile.gif
Rookie
Źle zrozumieliście ;p
Nie jabol, nie wyrażeniami regularnymi.
Użytkownik wprowadza zmienną typu char, następnie jest sprawdzane, czy nie zawiera ona liter,
jeżeli zawiera, wyświetla komunikat, jeżeli nie, jest zamieniana na float a potem są robione na niej obliczenia.
Dlatego taka konwersja by się przydała bo na zmiennej char obliczenia są złe(zresztą to nie dziwne)
Jabol
Rookie: a czemu nie po prostu strtod albo strtof? Jak przeczytasz doku to zobaczysz że jest tam argument który wskarze Ci pierwszy niepoprawny znak. Zrobi inaczej mówiąc wszystko za Ciebie. Oczywiście, że robisz to jako ćwiczenie, wtedy wszystko ok.

Pozdrawiam
l0ud
Domyślam się, że chodzi Ci o tablicę charów a więc string w stylu C. Nawet jak istnieje gotowa funkcja, wykorzystaj to jako trening: napisz ją sam smile.gif Przed chwilą wyskrobałem Ci jak to zrobić z intami dodatnimi:

  1. #include <stdio.h>
  2.  
  3. int StringToInt(char* string) {
  4. char actChar;
  5. int i; // iterator
  6. int output = 0; //liczba wyjściowa
  7. while((actChar = *(string+i)) != 0) { //pobieramy kolejne znaki ciągu, dopóki nie natrafimy na jego koniec (znak \0)
  8. if (actChar < 48 || actChar > 57) return -1; //błąd: ciąg zawiera nie tylko cyfry
  9. output *= 10; //mnożymy wyjściową liczbę przez 10
  10. output += actChar - 48; //aby wpisać pobraną przed chwilą cyfrę jedności
  11. i++; //zwiększamy iterator
  12. }
  13. return output;
  14. }
  15.  
  16. int main()
  17. {
  18. char input[20];
  19. scanf("%s",input);
  20. printf("Wpisana liczba to %i\n",StringToInt(input));
  21. return 0;
  22. }


Funkcja zwraca -1, gdy coś pójdzie nie tak

Żeby to zrozumieć, musisz:
- wiedzieć jak zbudowany jest string w stylu C (tablica charów zakończona zerem (zero wpisane przez użytkownika ma kod 48)
- znać tablicę kodów ASCII, aby wyciągnąć z niej wartości liczbowe poszczególnych znaków (chociażby cyfr): http://pl.wikipedia.org/wiki/ASCII
- znać wskaźniki: jak masz to słabo objaśnione w książce, ładnie wytłumaczone wskaźniki masz w jednym z rozdziałów tego tutoriala: http://www.gamedev.pl/tutorials.php?x=category&id=18 - ogólnie rzecz biorąc polecam całość (choć traktuje o gamedevie) - wszystko pięknie i przejrzyście opisane smile.gif

Przeróbka funkcji na liczby z przecinkiem polegałaby na zamianie outputa na floata, przerywaniu pętli w momencie wykrycia przecinka/kropki, a następnie rozpoczęciu drugiej pętli, która będzie pobierała i dodawała znaki po przecinku. To jest ciekawsze o tyle, że trzeba wymnażać kolejne cyfry przez kolejne potęgi liczby: 0,1: 0,01, 0,001... i dodawanie ich do wyjściowego floata. Najpierw napisz konwersje do inta po swojemu winksmiley.jpg
rzymek01
jeśli znasz PHP to powinieneś znać również ctype_*, to samo masz w c/c++ załączając nagłówek odpowiednio ctype.h/cctype smile.gif
Rookie
dzięki loud, mam trochę roboty, ale za 30min zobaczę co mi napisałeś, spróbuję to u siebie włożyć smile.gif
Ale tak czy owak masz rep+ za wysiłek, nie prosiłem o coś takiego, a ty z własnej nieprzymuszonej woli poświęciłeś swój czas smile.gif
Tylko jakbyś mógł powiedzieć jak wyciągnąć to -1 z returna to może w próbach bym dziś nocki nad tym nie zarwał ;p
Bo jak już taki kodzik jest, to bym sobie ułożył, że jeżeli return -1, to dam komunikat o błędzie smile.gif
l0ud
Po prostu zamiast dawać wywołanie funkcji bezpośrednio do printf, przypisz wynik do zmiennej i prostym ifem sprawdź poprawność.
Rookie
  1. #include <stdio.h>
  2.  
  3. int CharToFloat(char* oat) {
  4. char actChar;
  5. int i; // iterator
  6. float output = 0; //liczba wyjściowa
  7. while((actChar = *(oat+i)) != 0) { //pobieramy kolejne znaki ciągu, dopóki nie natrafimy na jego koniec (znak \0)
  8. if (actChar < 49 || actChar > 57) return -1; //błąd: ciąg zawiera nie tylko cyfry
  9. output *= 10; //mnożymy wyjściową liczbę przez 10
  10. output += actChar - 48; //aby wpisać pobraną przed chwilą cyfrę jedności
  11. i++; //zwiększamy iterator
  12. }
  13. return output;
  14. }
  15.  
  16. int main()
  17. {
  18. char oat[255];
  19. scanf("%255s",oat);
  20. printf("Wpisana liczba to %f\n",CharToFloat(oat));
  21. return 0;
  22. }

Oj rety, jak na 3 dzień c++ to chyba za trudne, zrobiłem jak wyżej, jednak komunikat o konwersji z int na float, mógłbyś to bardziej objaśnić? (o gotowcu nie mówię)
l0ud
Nie zmieniłeś typu zmiennej zwracanej przez funkcje: zresztą i tak to nie będzie działać z liczbami z przecinkiem: brak wykrywania kropki, drugiej pętli. Lepiej poczytaj sobie ten tutorial i spróbuj zrozumieć kod na inta tongue.gif
Rookie
A ja mam jeszcze jedno intrygujące pytanie ;p
  1. char exit;
  2. //działa:
  3. do {
  4. //coś
  5. } while (exit != 't');
  6. //nie działa:
  7. do {
  8. //coś
  9. } while (exit != 't' || exit != 'T');

po whilejest return 0;
a przed while jest pobierana zmienna exit poprzez scanf, dlaczego jak jest w while jeden argument to wszystko ok a jak 2 to program nie reaguje, i jest włączony cały czas?
W książce wstęp do programowania w języku c++ jest taki przykład i niby wszystko działa.
W tej książce programy kompilowane są mingw, a ja kompiluję w MSVC++, ale to nie wina mojego kompilatora, bo z ciekawości zainstalowałem mingw i efekt identyczny.
Pozdrawiam
l0ud
Bo zamiast lub powinno być i. Char zawsze będzie albo różny od t, albo od T...
Rookie
No przecież ;p
W książce się machnęli najwyraźniej ;p
Gdybym się tak tej książki nie słuchał tylko pomyślałbym jak bym to zrobił w php to pewnie nie zadał bym tego głupiego pytania
phpion
Pozwolę sobie odświeżyć temat.

Mam w planach dalsze rozwijanie się. Chciałbym pójść w stronę aplikacji okienkowych i tutaj mam dylemat co wybrać. Waham się między Javą, a .NET (konkretnie C#). Swego czasu zaopatrzyłem się w książki do Javy:


ale do tej pory nie miałem czasu aby do nich porządnie przysiąść. Czytałem sporo na temat Java vs .NET, zdania jak zwykle są podzielone. Mi osobiście lepiej podchodzi składnia Javy, jednak jakoś ciągnie mnie do .NET więc sądzę, że to kwestia przyzwyczajenia. Metody dostępowe do składowych obiektów leżą mi bardziej niż jawne odwoływanie się do składowych (co często widzę w kodach C#). Podoba mi się "kombajn" jaki dostajemy od MS tj. VS + możliwość łatwej integracji z MS SQL. Z drugiej jednak strony nie jestem zwolennikiem "wyklikiwania" aplikacji (możliwe, że też kwestia przyzwyczajenia). W moim odczuciu każda technologia ma więc swoje + i -.

Jako kryterium wyboru postawiłem sobie więc wybór technologii:

- bardziej przyszłościowej,
- pozwalającej na łatwiejsze znalezienie pracy,
- pozwalającej na osiągnięcie wyższych zarobków smile.gif

Czy moglibyście wypowiedzieć się na temat tych technologii/języków w odniesieniu do powyższych kryteriów?

PS: Prosiłbym o informacje bardziej z życia, a nie linki do pensje.net.
Theqos
Cytat(phpion @ 27.04.2010, 11:24:09 ) *
Jako kryterium wyboru postawiłem sobie więc wybór technologii:
- bardziej przyszłościowej,

Obie technologie mają podobną przyszłość, chociaż raczej inny target. IMHO .NET to takie nowoczesne Delphi, bardzo dobra integracja z windowsem, jego usługami i oprogramowaniem MS. Java to bardziej uniksy, duże systemy biznesowe, bardzo rzadko aplikacje okienkowe.

Cytat
- pozwalającej na łatwiejsze znalezienie pracy,

Jest bardzo mało pracy dla programistów "aplikacji okienkowych" w c# czy javie. Po pierwsze wszystkie kolosy i tak są pisane w c++ i nic się nie zapowiada na to, żeby ktoś to przepisywał bo zyski byłyby marne. Jeżeli chodzi o soft na zamówienie, to tutaj klienci głównie chcą systemów webowych, a jeżeli nie to i tak "okienka" zajmują, zazwyczaj, najmniej czasu w projekcie. W skrócie, pracodawcy nie potrzebują progamistów "okienek" tylko normalnych programistów i bardziej ich interesuje znajomość dziedzinny, którą będziesz "oprogramowywał" niż znajomość .NETowych/Javowych technologii.

Cytat(phpion @ 27.04.2010, 11:24:09 ) *
- pozwalającej na osiągnięcie wyższych zarobków smile.gif

Patrząc na studentów to niedługo będziemy mieli zatrzęsienie .NETowych "programistów". Zrobi się z tego taki programista Delphi czy PHP winksmiley.jpg Przyjmując zasadę popytu i podaży, będzie łatwiej o pracę w C#, ale w technologiach Javowych będzie można więcej zarobić. Oczywiście mówie tu o średniej, bo jak jesteś dobry to i w php zarobisz więcej.
mike
Cytat(phpion @ 27.04.2010, 11:24:09 ) *
- bardziej przyszłościowej,
- pozwalającej na łatwiejsze znalezienie pracy,
- pozwalającej na osiągnięcie wyższych zarobków smile.gif
Nie chcesz linków ale ten jednak jest ciekawy. Wynagrodzenia na stanowiskach IT w 2009 roku
.NET czy Java to kwestia upodobania. Obie technologie mają tych samych, w sensie, bogatych odbiorców. W obu możesz zagłębić się na długo i zdobyć, nauczyć, zarobić wiele.
Spawnm
Mike z danych na stronie którą nam podałeś wynika że html to język programowania a htmlowiec zarabia więcej od phpowca o.O
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.