ďťż

Ładny brzuch

Otóż znalazłem takie zadanie i nie mogę sobie z nim jakoś poradzić..


Sporządz opis funkcji o nagłówku

function liczbaCyfr(d:longint):byte, której wartością jest liczba cyfr danej liczby d. W funkcji użyj instrukcji while. Przetestyj poprawność działania dla liczb: 1234567, -1234567, Maxlongint, 00034000.


Czy ktoś potrafiłby napisać tę funkcję??



jeśli dobrze rozumie, to w funkcji wystarczy dzielić liczbe przez 10, zwiększyc jakiś licznik o 1 i sprawdzić czy liczba nie jest mniejsza od zera. jeśli będzie mniejsza to pętla sie zakończy i funkcja zwróci wartość licznika jaką aktualnie posiadamy

też o tym myślałem, ale co z liczbami: -1234567, 00034000 ?

Z ujemną powinno zadziałać zresztą z tą trzecią też. No chyba że ma nie zliczać 0 które są na początku wtedy musisz sprawdzać na początku jaka jest cyfra na początku jeśli jest to 0 to zmieniasz jakiś inny licznik i później od wyniku ostatecznego odejmujesz ten inny licznik. Namotałem wiem:) ale powinno działać.




Z ujemną powinno zadziałać zresztą z tą trzecią też. No chyba że ma nie zliczać 0 które są na początku wtedy musisz sprawdzać na początku jaka jest cyfra na początku jeśli jest to 0 to zmieniasz jakiś inny licznik i później od wyniku ostatecznego odejmujesz ten inny licznik. Namotałem wiem:) ale powinno działać.

z ujemną?? ale ona odrazu jest mniejsza od zera....


z ujemną?? ale ona odrazu jest mniejsza od zera....

... i również daje się dzielić przez 10 więc w czym problem? Pozatym jeśli do parametru funkcji przekażesz 00034000 to chyba zostanie ona od razu przemieniona do postaci 34000 (chyba)


z ujemną?? ale ona odrazu jest mniejsza od zera....
po kazdym dzieleniu uzywaj funkcji ktora obcina (a nie zaokragla) wszystkie liczby po przecinku i sprawdzaj czy to co pozostalo jest rowne 0

Przecież parametrem wywołania jest longint, więc przy dzieleniu wynikiem będą liczby całkowite. W pętli while ma być inkrementacja jakiejś zmiennej, która zostanie zwrócona przez funkcję. A warunek będzie d różne od zera. Trzeba tylko popróbować z ujemnymi i sprawdzić, czy nie warto jej przedtem zamienić na przeciwną, ale raczej też powinno działać. Zer na początku liczby to liczyć nie będzie, ale jak ktoś zapisuje tak krestyńsko liczby to powinno mu być wszystko jedno jaki wynik dostanie.

Ewentualnie można liczbę zamieniać na string i zwracać długość stringa, ale to też nie zliczy zer na początku.

masz dzielić dopóki wartość bezwzględna wyniku (abs) jest większa od 1
a co do 0001273 to jak ją przekażesz jako LongInt to i tak dostaniesz 1273 bez nieznaczących zer. Żeby nieznaczące zera były "widoczne" (nie gubiły się po drodze) musiałbyś przekazywać jako string a wtedy wystarczy Length(zmienna_string) i masz liczbę cyfr + ewentualnie znak liczby (zakładając, że przekazano tylko liczbę baz innych znaków)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •