Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Skrypt skracania zer
Forum PHP.pl > Forum > Przedszkole
kalafior122
Witam muszę napisać skrypt skracania zer a kompletnie nie wiem jak się do tego zabrać, może mi ktoś w tym pomóc?
toaspzoo
Skracania zer ?
Może coś więcej nam powiesz ? sciana.gif
sobol6803
  1. $liczba = '0.0000001';
  2. $liczba = str_replace('0', '', $liczba);
  3. echo $liczba;


laugh.gif
kalafior122
i co to działa?? Na to to raczej bym sam wpadł. Bo tu chodzi o to że gdy mamy np. 200/40 i możemy skrócić zera wtedy dzielimy nie przez 200/40 tylko 20/4

A co do postu 2xup to ty chyba nie miałeś fizyki tongue.gif
nospor
Cytat
i co to działa?? Na to to raczej bym sam wpadł
No raczej bys nie wpadł, skoro napisałeś posta na forum...

Cytat
A co do postu 2xup to ty chyba nie miałeś fizyki
Może jednak napisz o co ci chodzi bo niby skad mamy wiedziec ze akurat ci chodziło o termin z fizyki? Na tym forum ludzie mają kupę głupich określeń na to co chcą zrobić i sorki, ale nawet najwieksza wrozka moze miec problem z załapaniem o co im chodzi...

[POMOCY] i na przyszłośc daruj sobie taki tagi. One niczemu nie służą
redeemer
Ja miałem fizykę i też nie mam pojęcia co kryje się pod pojęciem "skracanie zer"? Może 0.001 * 1000? biggrin.gif
lukaskolista
http://pl.wikipedia.org/wiki/Najwi%C4%99ks...%B3lny_dzielnik Rozklad na czynniki pierwsze, teraz wystarczy to tylko przeniesc na kod.
kalafior122
chodzi o to:

nospor
załamka.... przecież to jest matematyka a nie fizyka...
kalafior122
Cytat(nospor @ 19.07.2012, 11:01:13 ) *
załamka.... przecież to jest matematyka a nie fizyka...

ee ja tam najwięcej tego robiłem na fizyce tongue.gif
nospor
s=200
t=20

Liczysz zera od prawej dla każdej z liczb. Następnie kasujesz od prawej u każdej z liczb najmniejszą liczbę zer z dwóch liczb. a kasowanie to poprostu dzielenie przez daną potęgę 10.
A liczbe zer to chyba umiesz policzyć?

Cytat
ee ja tam najwięcej tego robiłem na fizyce
A jak na fizyce idziesz siku to masz problem fizyczny czy biologiczny??
Następnym razem opisuj problem od razu a nie sypiesz pojęciami których sam nie rozumiesz.
kalafior122
tak szczerze to nie sad.gif
Shido
Możesz np. rozbić sobie liczby na tablicę po jednym znaku i od końca sprawdzać czy znak == 0 i dawać np. $ile++; az nie trafi się na inny znak.
Tak wiem nieoptymalne, ale innego pomysłu nie mam.

I w sumie wyszło że chodziło ci o coś zupełnie innego niż każdy myślał...
Trza wyrażać się precyzyjnie, bo skracanie zer to:
0001 -> 1
10000 -> 1
1.3000 -> 1.3
0101010 -> 10101
0101010 -> 111
i też to co ty podałeś.
wNogachSpisz
A w matematycznych funkcjach nie ma przypadkiem czegoś co rozwiąże Twój problem?
http://php.net/manual/pl/book.math.php
kalafior122
Cytat(wNogachSpisz @ 19.07.2012, 11:34:34 ) *
A w matematycznych funkcjach nie ma przypadkiem czegoś co rozwiąże Twój problem?
http://php.net/manual/pl/book.math.php


Niestety nie
markonix
A jaki sens jest w ogóle tego skryptu?
Przyjmując, że chcesz napisać funkcje to jakie ma przyjmować argumenty i jakie wartości zwracać?
Dwie liczby i zwracać dwie liczby "skrócone" o te zera?
kalafior122
tak. Głównie chodzi o zamianę zer które można skrócić na zera skreślone tak jak jest pokazane na obrazku
peter13135
najpierw ten string podziel sobie za pomocą explode na dwie liczby.

czyli takie coś :
Kod
'120/60'

zamień na
Kod
array('120','60')

następnie obie wartości zamień na integer.
Kod
array(120,60)

następnie sprawdzaj czy obie liczby dzielą się przez 10 bez reszty. 120%10== 0, więc się dzieli przez 10. 60%10==0, więc też się dzieli przez 10.
Więcej na ten temat masz tutaj : http://php.net/manual/en/internals2.opcodes.mod.php
Jeśli obie dzielą się bez reszty, to obie dzielisz przez 10 i sprawdzasz od początku czy dzielą się przez 10. Jeśli nie to masz już wersję "skróconą" i robisz dalej co chcesz.

Tylko, że... czy Ty nie chciałbyś przypadkiem, żeby ten skrypt np. takie działanie: 140/70 skrócił do 2/1 lub po prostu 2 ? W Twoim przypadki skróci tylko do 14/7.
Do tego warto użyć algorytmu "sito eratostensa" (czy jakoś tak) bo jak wiadomo - każda liczba złożona to iloczyn liczb pierwszych.
kalafior122
a tak po ludzku? chodzi mi tylko i wyłącznie o zamianę zer które się nadają do skrócenia na skreślone czyli żeby wyświetlało
tak: 170/40. pisz na GG 10714401
Shido
Napisał ci już po ludzku. Widać że liczysz na gotowca.
Kolejna sprawa to taka że forum jest po to by tu rozwiązywać problemy, a nie przez GG.

1. Zamieniasz liczby na inta ( by sie skrypt nie rozsypał )
2. Sprawdzasz czy liczba ma resztę z dzielenia przez 10
3. Jeżeli nie ma ( liczba%10 == 0 and liczba2%10 == 0) to ucinasz z obu ostatni znak
4. Sprawdzanie i ucinanie w pętli która skończy się gdy któraś z liczb nie będzie już podzielna bez reszty przez 10.

Bardziej po ludzku się nie da.
redeemer
Cytat(Shido @ 19.07.2012, 14:55:17 ) *
3. Jeżeli nie ma ( liczba%10 == 0 and liczba2%10 == 0) to ucinasz z obu ostatni znak

Nie łatwiej podzielić przez 10? smile.gif
Shido
Można ale i tak będzie trzeba sprawdzić potem czy wyszła liczba całkowita. ( chyba tongue.gif )
redeemer
Jeżeli $a jest liczbą całkowitą i $a%10==0 to $a/10 musi być liczbą całkowitą smile.gif
Shido
Czytanie ze zrozumieniem...
Ty piszesz o punkcie 3, ja odpowiadam tylko że mam na myśli punkcie 2 tongue.gif
redeemer
To czy obie liczby mają resztę z dzielenia przez 10 jest to główny warunek pętli i jest to oczywiste. Widocznie Ty nie zrozumiałeś mojego posta, że zamiast obcinać ostatni znak (co wiązało by się z wewnętrznym rzutowaniem na stringa) wystarczy podzielić przez 10.

Do autora tematu, co by nie offtopować:
  1. while( $licznik%10==0 && $mianownik%10==0) {
  2. $licznik /= 10;
  3. $mianownik /= 10;
  4. }

Czy to było takie trudne?
-Kalafior122-
Ale jeszcze trzeba te zera (skreslone) wyswietlic jako skreślone
redeemer
Rzeczywiście, to już jest problem nie do przeskoczenia...

Podpowiedź: wyświetlaj tyle skreślonych zer ile było iteracji pętli. (CSS: text-decoration: line-through)
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.