Mam problem z takim zadaniem.Program który wypisuje 100 liczb pierwszych i grupuje je po 20.
Wiem jak napisac funkcje pierwszą ale nie wiem jak zrobic aby wypisywało liczby w listboxie(nie znalazłem podobnego tematu na tym forum)...
Proszę o pomoc.
ListBox1.Items.Add(IntToStr(Liczba));
Pozwól że ci pomogę:
ListBox.Items.Add(IntToStr(Liczba));
Wiem jak zrobić zeby wypisywało "coś" w listboxie ale nie potrafie aby grupowało liczby po 20??
wstawiaj pustą linię po każdych dwudziestu? ;-)
Dobry pomysł nie pomyslałem zaraz wkleje program mom nadzieje że będzie działał.
.........................
function pierwsza (arg:integer):Boolean;
var I :Integer;
begin
pierwsza :=true;
for I:=2 to round(sqrt(arg)) do
if(arg mod I)=0 hten pierwsza := false
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender:TObject);
var i,x,y:Integer
begin
// tutaj trzeba jakąś pentle bo zrobić ale nie zabardzo wiem jak
Może tak:
function pierwsza (arg:integer):Boolean;
var I :Integer;
begin
pierwsza :=true;
for I:=2 to round(sqrt(arg)) do
if(arg mod I)=0 then pierwsza := false
end;
procedure TForm1.Button1Click(Sender:TObject);
Const IleLiczbZnalezc=100;
CoIleEnter=20;
Var I, Q: Integer;
Begin
I := 0;
Q := 0;
While (I < IleLiczbZnalezc+1) Do
Begin
Inc(Q);
if Pierwsza(Q) Then
Begin
Inc(I);
ListBox1.Items.Add(IntToStr(Q));
if (I Mod CoIleEnter) = 0 Then
ListBox1.Items.Add('');
End;
End;
End;
Sprawdzone i działa ;)
if(arg mod I)=0 hten pierwsza := false
To się nie skompiluje...
'hten' --> 'then'
Wszystko fajnie tylko jeszcze jak bym mógł prosic o wytłumaczenie zasady działania tego(Dopiero zaczynam nauke pascala/delphi i bardziej żależy mi na zrozumieniu)
I := 0;
Q := 0;
While (I < IleLiczbZnalezc+1) Do
Begin
Inc(Q);
if Pierwsza(Q) Then
Begin
Inc(I);
ListBox1.Items.Add(IntToStr(Q));
if (I Mod CoIleEnter) = 0 Then
ListBox1.Items.Add('');
z góry dziekuje...
Kolejny post z banałami w złym dziale. Zapamiętajcie ludzie, że z banałami pisać należy ZAWSZE do działu NEWBIE [!!!]
I := 0; // <- Zmiennej I przypisz liczbę 0;
Q := 0; // <- Zmiennej Q przypisz liczbę 0;
While (I < IleLiczbZnalezc+1) Do // <- podczas gdy wartość zmiennej I jest mniejsza od zmiennej IloscLiczb powiększonej o 1 rób...
Begin // <- konieczne w sytuacji gdy w pętli ma zostać wykonana więcej niż jedna instrukcja
Inc(Q); // <- zwiększ wartość zmiennej Q (przy braku drugiego parametru zwiększa o jeden).
if Pierwsza(Q) Then // <- jeżeli funkcja Pierwsza z parametrem Q zwróci Prawdę (True) to...
Begin // <- wyjaśniłem wcześniej - patrz wyżej...
Inc(I); // <- Zwiększ wartość zmiennej I (o jeden)
ListBox1.Items.Add(IntToStr(Q)); // <- do komponentu ListBox1 własności Lines dodaj wartość zmiennej Q przekonwertowanej z liczby na tekst
if (I Mod CoIleEnter) = 0 Then // <- jeżeli reszta z dzielenia wartości zmiennej I przez wartośc zmiennej CoIleEnter wynosi 0 to...
ListBox1.Items.Add(''); // <- dodaj pustą linię tekstu do własności Items komponentu ListBox1
Ufff... aż cięzko pisać takie to są banały, oczywiste oczywistości nie powinno się tłumaczyć. Kod Delphi i Pascal przypominają
troszkę jakby taki list po angielsku pisany do kogoś kto chce ogarniać te podstawy, a u Ciebie z tym cieńko - musisz się uczyć.
Dobrze nastepnym razem swoje pytanie umieszcze w odpowiednim miejscu.
Ale mam jeszcze pytanie
- Chciałbym aby aby grupowanie po 20 wypisywało liczby pierwsze w wierszu a nie kolumnie?
dziękuje za odpowiedz w poprzednim pytaniu
Ech - chyba nemal wszyscy pytający tutaj kurcze idą na łątwiznę zamiast samodzielnie chwilę pomyślec, a i w ogóle
to do przechowywania danych w kolumnach nadaje się bardziej TListView, ale jak go używać i ustawić, patrz google.
//...
function Pierwsza(Arg : integer) : boolean;
var
I : Integer;
begin
Pierwsza := True;
for I := 2 to round(sqrt(Arg)) do
if (Arg mod I) = 0 then
pierwsza := False
end;
procedure TForm1.Button1Click(Sender : TObject);
const
CoIleEnter = 20;
IleLiczbZnalezc = 100;
var
S : string;
I, Q : Integer;
begin
I := 0;
Q := 0;
S := '';
ListBox1.Items.Clear;
while (I < IleLiczbZnalezc + 1) do
begin
Inc(Q);
if Pierwsza(Q) then
begin
Inc(I);
S := S + IntToStr(Q) + ' ';
if (I mod CoIleEnter) = 0 then
begin
ListBox1.Items.Add(S);
S := '';
end;
end;
end;
end;
Modyfikowałem ten program troche ale nie sziała tak jak potrzeba.
Program miał wypiusywać liczby pierwsze mniejsze od jakiegoś N (którego uzytkownik wpisze do edita)
function Pierwsza(Arg : integer) : boolean;
var
I : Integer;
begin
Pierwsza := True;
for I := 2 to round(sqrt(Arg)) do
if (Arg mod I) = 0 then
pierwsza := False
end;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const
CoIleEnter = 20;
var
S : string;
I, Q : Integer;
x: Integer;
pom:Integer;
begin
I := 0;
Q := 1;
S := '';
x:=StrToInt(Edit1.Text);
For pom:=1 to x-1 do
begin
Inc(Q);
if Pierwsza(Q) then
begin
Inc(I);
S := S + IntToStr(Q) + ' ';
if (I mod CoIleEnter) = 0 then
begin
ListBox1.Items.Add(S);
S := '';
end;
end;
end;
end;
Ten program działa poprawnie kedy wpisuje się do edita liczbe wiekszą od 71 nie wiem dlaczego??
Fakt, nie przetestowalem dla mniejszej ilości liczb, po prostu program doda Tobie do
ListBoxa liczby dopiero kiedy będzie ich 20. Ale przecież już podałem prawidlowy kod
w temacie: Modyfikacja programu w delphi(2 pytania)