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

Zaloguj się, aby skomentować

Będziesz mógł dodać komentarz po zalogowaniu się



Zaloguj się
Zaloguj się, aby obserwować  

×