Programowanie
Klodzia: Mam mały problem. Chcę napisać program w pascalu, który będzie wypisywał liczby pierwsze
mniejsze od wczytanej n oraz ich liczbę. Liczby pierwsze wypisuje mi normalnie, ilość ich
również, ale nie wiem czemu w nowej linijce jest napisane 0 .
O to mój pseudokod
function liczby(n:integer):integer;
var i,k,l:integer;
pierwsza:boolean;
begin
l:=0;
for k:=2 to n−1 do
begin
pierwsza:=true;
for i:= 2 to k−1 do
if k mod i=0 then pierwsza:=false;
if pierwsza=true then
begin
write(k,' ');
l:=l+1;
end;
end;
writeln;
writeln(l);
end;
var n,i,k,l:integer;
pierwsza:boolean;
begin
readln(n);
writeln(liczby(n));
readln;
end.
24 kwi 16:04
zxc:
l:=0;
writeln(l);
24 kwi 21:01
Kejt: Pascala zbytnio nie ogarniam choć pewnie różnica niewielka do C/C++ w składni, mogę napisać i
podesłać kod w C
24 kwi 21:05
Mateusz: program prime;
var n,lp,p,d : longint;
t : boolean;
begin
readln(n);
lp := 0;
p := 2;
while lp < n do
begin
t := true;
for d := 2 to p − 1 do
if p mod d = 0 then
begin
t := false;
break;
end;
if t then
begin
write(p,' ');
inc(lp);
end;
inc(p);
end;
writeln;
end.
Musisz dopisac sobie wypisywanie ilosci liczb co trudne nie jest, instrukcja inc powoduje
inkrementacje
a instrukcja która jest przeciwienstwe czyli taka ktora dokonuje dekrementacji argumentu to
Dec, są to predwefiniowane instrukcje języka Pascal.
24 kwi 21:49
b.: Jeśli chodzi o Twój program, to linia trzecia od końca:
writeln(liczby(n));
wypisuje wynik funkcji liczby, ale ta funkcja chyba nic nie zwraca; jeśli dobrze pamiętam
składnię, powinno byc na końcu tej funkcji
liczby:=l;
Gdyby tak było, to wtedy liczba liczb pierwszych będzie wypisywana 2x, raz w funkcji i raz poza
nią, więc któreś writeln trzeba wywalić.
25 kwi 00:39
Klodzia: Działa, ale nie za bardzo rozumiem, czemu było źle i dlaczego trzeba w taki sposób to
zmodyfikować? Nie rozumiem też zapisu liczby:=l
25 kwi 11:41
Klodzia: B to do ciebie pytanie
25 kwi 11:43
Klodzia: Nasunęło mi się nowe pytanie. Gdyby tak ograniczyć program tylko do wypisania liczb pierwszych
to umieszczając w kodzie funkcji liczby:=k; zamiast write(k,' '); wynikiem jest tylko ostatnie
k fora. Co należy więc z tym faktem zrobić, skoro musi być na końcu funcji zwracana jakaś
wartość?
25 kwi 12:25
b.: Zapis
liczby:=l;
pozwala funkcji zwrócić wartość i w zasadzie zawsze powinno się coś takiego w funkcji znaleźć.
Drugie pytanie to jest problem, jak zrobić, żeby funkcja zwracała tablicę. Szczerze mówiąc, nie
pamiętam jak to się robi w Pascalu. Być może że trzeba dać tablicę jako argument.
Ale gdyby się ograniczać tylko do wypisywania liczb pierwszych, to można nie zmieniać tego
write(k,' ');, wywalić 'liczby:=...' i zmienić funkcję na procedurę (czyli funkcję, która nic
nie zwraca, o ile dobrze pamiętam, w Pascalu jest takie rozróżnienie).
26 kwi 23:58