Valaki eltudja magyarázni ezt a programot?
1.:Ebben a programban miért van négy szóközzel kijjebb az else, mint az if és mit szolgál a break??
number = int(input("Prím számok 2 és X között! Add meg az X-t! X = "))
for num in range(2,number + 1):
if num > 1:
for i in range(2,num):
if (num % i) == 0:
break
else:
print(num)
Az if a feltétel ami ha bekövetkezik akkor jön a "break" ami kilép a for ciklusból.
Az else ág akkor hajtódik végre ha az if feltétele nem teljesül és azért van az else beljebb mert az az if struktúra része.
Egyébként tele fogja fsni a képernyőt számokkal, mert ha num%i soha vagy csak nagyon sokára ==0 akkor az else addig mindig végrehajtódik.
Plusz prímszámok keresésére ez a legprimitívebb algoritmus amit el tudok képzelni. (bár ez már nem volt része a kérdésnek)
„miért van négy szóközzel kijjebb az else, mint az if...?”
„azért van az else beljebb mert az az if struktúra része.”
„Amikor ő bemásolta neki beljebb is volt... Bár nem tudom ez miért olyan lényeges ha amúgy érthető a kérdés.”
Hát, az indentálás lenyelése miatt „amúgy” nem lett igazán érthető a kérdés. Az else helye éppen hogy az if oszlopában lenne, ha ahhoz tartozna, viszont nem ott van, és ezt nem érti Kérdező:
number = int(input("Prímszámok 2 és X között! Add meg az X-t! X = "))
for num in range(2, number + 1):
if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
print(num)
Szerintem itt a for ciklus else záradékáról van szó, amely akkor lép életbe, ha a ciklus break nélkül, normálisan lefutott:
Ez az else tehát nem valamelyik ifhez, hanem a belső for-ciklushoz tartozik, és lám, pont a megfelelő oszlopban van.
Megpróbáltam pascalban leutánozni, de mivel annak tudomásom szerint nincs ilyen trükkös fogása, ezért egy boolean változót használtam a break figyelésére. Úgy látom, működik:
var
number, num, i : integer;
ok : boolean;
begin
Write('Prímszámok 2 és X között! Add meg az X-t! X = ');
ReadLn(number);
for num := 1 to number do
if num > 1 then
begin
ok := true;
for i := 2 to num -1 do
if num mod i = 0 then
begin
ok := false;
break;
end;
if ok = true then WriteLn(num);
end;
end.
+ Oppardon, reggelre kelve vettem csak észre, hogy a pascal programban elírtam num kezdőértékét, így 1-et is bevontam a prímszámok körébe... Helyesen:
for num := 2 to number do
C nyelvű változat:
#include <stdio.h>
int main(){
int number;
char ok;
printf("Prímszámok 2 és X között! Add meg az X-et! X = ");
scanf("%d", &number);
for (int num = 2; num < number + 1; num++) {
ok = 0;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
ok = 1;
break;
}
}
if (ok < 1) printf("%d\n", num);
}
return 0;
}
+ Nem t'om, mi van ma velem, így talán illendőbb (vagyis az ok 1 értéke az igaz):
int main(){
int number;
char ok;
printf("Prímszámok 2 és X között! Add meg az X-et! X = ");
scanf("%d", &number);
for (int num = 2; num < number + 1; num++) {
ok = 1;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
ok = 0;
break;
}
}
if (ok) printf("%d\n", num);
}
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!