Kezdőoldal » Számítástechnika » Programozás » Valaki eltudja magyarázni ezt...

Valaki eltudja magyarázni ezt a programot?

Figyelt kérdés

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)



2019. jan. 4. 18:36
 1/8 anonim ***** válasza:

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)

2019. jan. 4. 18:58
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
27%
Itt semmi nincs kijjebb semminél.
2019. jan. 4. 19:28
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:
0%
A kérdező egy python programot másolt be. Ott beljebb lenne az else, csak a GYK levágja ezeket a szóközöket.
2019. jan. 4. 19:37
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:
"lenne"
2019. jan. 4. 19:43
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:
0%
Amikor ő bemásolta neki beljebb is volt, utána meg nem nézte meg a kiírt kérdést. Bár nem tudom ez miért olyan lényeges ha amúgy érthető a kérdés.
2019. jan. 4. 19:51
Hasznos számodra ez a válasz?
 6/8 tabaki ***** válasza:
54%

„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:

[link]

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.

2019. jan. 5. 02:20
Hasznos számodra ez a válasz?
 7/8 tabaki ***** válasza:

+ 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;

}

2019. jan. 5. 07:32
Hasznos számodra ez a válasz?
 8/8 tabaki ***** válasza:

+ 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;

}

2019. jan. 5. 07:55
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!