Skocz do zawartości
Zaloguj się, aby obserwować  
Guitar Guy

2 Funkcje w Pascalu

Polecane posty

Ma może ktoś na składzie 2 takie funkcje w Turbo Pascalu? Jedna ma sprawdzać czy liczba ze zmiennej np. "liczba" jest pierwsza a druga czy jest palindromem. Pozdro.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

z tego co wiem liczba nie moze byc palindromem no chyba ze chodzi ci czy jest to np 121, jesli chodzi o pierwsze

 

 

 

if liczba/1 than if liczba/liczba than writeln('liczba jest pierwsza')

else

writeln('liczba nie jest pierwsza')

 

to możesz dac w petle i masz

 

a o palindrom musisz dodac pole zmiennej

 

a:=lengt(wyraz)

 

for a downto 1 do

b:=b+wyraz[a]

if wyraz=b than writeln('jest palindromem')

else

write('nie jest palindromem')

 

 

5 sek ale domyslam sie ze 1 klasa technikum informatycznego :D

i powiedz czy o to chodzilo

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nie technikum:) Gimnazjum, zadanie dodatkowe:P Tak dokładniej to chodzi o to że mam liczby z przedziału np. od 1 do 500 i program musi napisać liczby pierwsze będące palindromami.

Chyba taki powinien być algorytm:

Funkcja która sprawdza czy liczba jest pierwsza

Funkcja która sprawdza czy liczba jest palindromem

 

pętla razy 499{

liczba = 1

jeśli liczba jest pierwsza pierwsza

{

jeśli jest palindromem {

napisz wartość zmiennej liczba

}

}

liczba := liczba+1

}

 

Z Pascalem mam do czynienia pierwszy raz :D Myślałem że aż tak nie różni się do php :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

program holahola;
uses crt;
var a,b,c,i:integer;
begin
clrscr;
for i=1 to 500 do begin
if i/1 than if 1/1 than writeln('liczba jest pierwsza');
else
writeln(i,'liczba nie jest pierwsza');
a:=lengt(i);
for a downto 1 do
b:=b+i[a];
if i:=b than writeln(i,'jest palindromem');
else
write('nie jest palindromem');
end;
readln;
end.

 

 

powinno bzc ok jak cos debuger w borlandzue zglosi ci błąd ale to skumasz o co chodzi bo wszystko jasno przedstawia

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Thx, już sprawdzam :)

 

Zapomniałem że nie można edytować... :/

OK, działa, ale nie do końca o to chodziło. On ma wypisywać tylko liczby, nic więcej, najlepiej jedna pod drugą, nic więcej. Czy mógłbyś poprawić mi ten kod, proszę :D ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
z tego co wiem liczba nie moze byc palindromem
To źle wiesz...

 

if liczba/1 than if liczba/liczba than writeln('liczba jest pierwsza')
Wiesz w ogóle co to liczba pierwsza?

Poza tym nie ma takiego słowa kluczowego jak than. No i and też jest czasem przydatne...

 

a:=lengt(wyraz)

 

for a downto 1 do

b:=b+wyraz[a]

if wyraz=b than writeln('jest palindromem')

Już bardzo dawno z Pascala nie korzystałem, ale jestem przekonany, że to także jest źle.

 

5 sek ale domyslam sie ze 1 klasa technikum informatycznego :D
Widocznie jeszcze o pare sekund za mało...

 

powinno bzc ok jak cos debuger w borlandzue zglosi ci błąd ale to skumasz o co chodzi bo wszystko jasno przedstawia
Nie, nie powinno. Jeżeli nie wiesz jak komuś pomóc to nie 'pomagaj'...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

p pisałem to z 30 sek nie chciało mi sie myśleć nad AND a i literowki mozna poprawic debugerem

 

nie czepiaj sie takich pierdolek

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
p pisałem to z 30 sek nie chciało mi sie myśleć nad AND a i literowki mozna poprawic debugerem

 

nie czepiaj sie takich pierdolek

Przecież nie czepiam się przez than i and. Całość jest beznadziejna i nie robi tego co ma robić...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dobra :D Już sam napisałem, zrobiłem sobie przyśpieszony kurs Pascala :)

W razie jakiś błędów proszę mnie poprawić. Oto kod:

program zadanie;

uses crt;

function pierwsza(liczba):word;

var licznik : integer;

pierwsza : boolean;

begin

Readln (liczba);

pierwsza := true;

For licznik := liczba-1 downto 2 do

If liczba mod licznik = 0 then pierwsza := false;

If pierwsza then pierwsza := true;

Readln;

end.

 

function palindrom(liczba : String): Boolean;;

var

i : Integer;

Ok : Boolean;

begin

i := 1;

Ok := True;

while (i <= Length(liczba) div 2) and Ok do

begin

Ok := liczba = liczba[Length(liczba)-i+1];

Inc(i);

end;

Palin := Ok;

end;

 

REPEAT

var liczba=1;

If pierwsza AND palindrom then

writeln(liczba);

liczba:=liczba+1;

UNTIL liczba=1000;

end.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dobra :D Już sam napisałem, zrobiłem sobie przyśpieszony kurs Pascala :D

W razie jakiś błędów proszę mnie poprawić.

 

W funkcji od liczby pierwszej w przypadku w przypadku gdy liczba jest podzielna bez reszty

czyli po

If liczba mod licznik = 0 then pierwsza := false;

możesz spokojnie już opuścić pętlę, bo bez sensu sprawdzać dla kolejnych liczb i szkoda czasu.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Już sobie poradziłem, dzięki za pomoc... :D Jak by ktoś chciał to tu jest kod:

program zadanie;

users crt;

var liczba: integer;

sliczba:string;

function lpierwsza(n:word):boolean;

var licznik : integer;

pierwsza : boolean;

 

begin

lpierwsza := true;

For licznik := n-1 downto 2 do

begin

If n mod licznik = 0 then lpierwsza := false;

end;

end;

 

function palindrom(liczba:String):Boolean;

 

var I : Integer;

begin

I := Length(liczba) div 2;

palindrom := True;

while I > 0 do

begin

Dec(I);

if liczba[i+1] <> liczba[Length(liczba) - I] then

begin

palindrom := False;

Exit;

end;

end;

end;

 

begin

liczba:=10;

REPEAT

str(liczba,sliczba);

If lpierwsza(liczba) AND palindrom(sliczba) then

writeln(liczba);

liczba:=liczba+1;

UNTIL liczba=1001;

readln;

end.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×