Dany jest plik tekstowy w którym w każdej linii jest zapisana jedna liczba dodatnia w systemie siódemkowym, napisz procedurę, która sprawdzi czy wszystkie liczby w tym pliku dzielą się prze 3.
Jak zamienić liczby z zapisu siódemkowego na dziesiętny, żeby sprawdzić podzielność?
[Pascal] funkcja sprawdzająca podzielność
-
- Użytkownik
- Posty: 1272
- Rejestracja: 8 sty 2011, o 18:18
- Płeć: Mężczyzna
- Lokalizacja: Warszawa
- Podziękował: 295 razy
- Pomógł: 115 razy
[Pascal] funkcja sprawdzająca podzielność
e tam od razu zamieniać.. trik z sumą cyfr podzielną przez \(\displaystyle{ 3}\) w systemie siódemkowym też działa..
ale jeśli chcesz koniecznie zamienić najpierw na liczbę dziesiętną to prosze bardzo:
funkcja przyjmuje liczbę \(\displaystyle{ n}\) o podstawie \(\displaystyle{ p}\) i zwraca ją w postaci dziesiętnej..
wersja z sumą cyfr:
jest nawet nieco prostsza i potem wystarczy jedno sprawdzenie podzielności sumy cyfr..
-- 19 lut 2012, o 21:35 --
specem od Pascala nie jestem, ale tam jest napisane plik tekstowy?
no to tym bardziej wersja z sumą cyfr (pewnie nawet autorowi zadania o to chodziło).. do eolna czytamy po znaku (skoro w jednej linii jedna liczba i to w dodatku dodatnia) i przy eolnie mamy już sumę cyfr liczby w danym wierszu..
ale jeśli chcesz koniecznie zamienić najpierw na liczbę dziesiętną to prosze bardzo:
Kod: Zaznacz cały
function PToDec(n,p:integer):integer;
var dec,d,s:integer;
begin
dec:=0; d:=1;
while n>0 do begin
s:=n mod 10;
dec:=dec+s*d;
d:=d*p; n:=(n-s) div 10;
end;
PToDec:=dec;
end;
wersja z sumą cyfr:
Kod: Zaznacz cały
function suma_cyfr(n:integer):integer;
var s,a:integer;
begin
s:=0;
while n>0 do begin
a:=n mod 10;
s:=s+a;
n:=(n-a)div 10;
end;
suma_cyfr:=s;
end;
-- 19 lut 2012, o 21:35 --
specem od Pascala nie jestem, ale tam jest napisane plik tekstowy?
no to tym bardziej wersja z sumą cyfr (pewnie nawet autorowi zadania o to chodziło).. do eolna czytamy po znaku (skoro w jednej linii jedna liczba i to w dodatku dodatnia) i przy eolnie mamy już sumę cyfr liczby w danym wierszu..
-
- Użytkownik
- Posty: 44
- Rejestracja: 23 gru 2011, o 22:59
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Pomógł: 3 razy
[Pascal] funkcja sprawdzająca podzielność
Kod: Zaznacz cały
var s:string; i, k:integer; w:boolean;
begin
w:=true;
repeat
readln(s);
k:=0;
for i:=1 to length(s) do
k:=k + ord(s[i])-48;
w:=w and (k mod 3=0);
until eof or (not w);
writeln(w)
end.
bo np. '66666' siódemkowo to tylko 16806 dziesiętnie
a MAXINT bywa że równy tylko 32767
traktowanie wejścia jako ciąg siódemkowych cyfr dramatycznie zmienia dziedzinę
bo np. możemy sprawdzić liczbę='6666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666
6666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666'
bo string mieści tylko 255 znaków, ale...
Ostatnio zmieniony 20 lut 2012, o 12:32 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Powód: Poprawa wiadomości.