Kezdőoldal » Számítástechnika » Programozás » C-ben miért nem működik "ez"...

C-ben miért nem működik "ez" a ciklus?

Figyelt kérdés

A feladat kiíratni a 6-ra végződő négyzetszámokat 1000-től visszafelé, és a feladatot meg is oldottam már, de egy másiknál működött a while ciklus úgy, hogy pl.


int j = 0;

while (j < 10 && j++) ...


Így a


while (j < 10) {

...

j++;

}


lerövidíthető.


Ennél a feladatnál ez már nem működött, és nem tudom, mi miatt.


Így oldottam meg, és a második, belső ciklust akartam rövidíteni:


int i = 1000, j;


while (i > 0) {

if (i % 10 == 6) {

j = 0;

while (j * j <= i) {

if (j * j == i) printf("%d\t%d\n", j, i);

j++;

}

}

i--;

}


printf("\nend\n");



2018. szept. 15. 23:42
1 2
 11/14 A kérdező kommentje:
Okés, keresek más utat
2018. szept. 16. 15:26
 12/14 tabaki ***** válasza:
Használj két külön while-ciklust. Az elsővel megkeresed azt a számot, amelyiknek a négyzete már nagyobb, mint 1000, a másodikban meg ezt csökkented, amíg a négyzete 6-nál kisebb nem lesz, közben pedig kiírod a 6-ra végződő négyzeteket. Így nem kell se sqrt, se for.
2018. szept. 16. 22:43
Hasznos számodra ez a válasz?
 13/14 A kérdező kommentje:

Még rövidebb, és az alapelv is más


int i = 31;

while (i > 0) {

if (i * i % 10 == 6) printf("%d\t", i);

i++;

}

2018. szept. 19. 16:48
 14/14 tabaki ***** válasza:

Attól eltekintve, hogy az i (nyilván egyszerű elgépelésből adódó) növelése miatt a programod nem azt csinálja, amit kell, az alapelv pont ugyanaz, mint írtam. Abban viszont tökéletesen igazad van, hogy jobban megéri egyszerűen nulláig vizsgálni, mint állandóan szorzással ellenőrizgetni, hogy elérte-e már azt az alsó határt, amin túl már nem kell csökkenteni.

Az i kezdőértékének bűvös számként való beírása szerintem nem egészen tisztességes megoldás, oda igenis illik berakni a ciklust, amelyik megkeresi a tartomány végét, hogy a megoldás általánosabb és más értékekre is könnyen alkalmazható legyen. Ilyesmire gondoltam:


#include <stdio.h>

int main(){

      int i = 1, felso_hatar = 1000, vegzodes = 6;

      while (i * i <= felso_hatar) i++;

      while (i > 1){

            if (i * i % 10 == vegzodes) printf("%d\t%d\n", i, i * i);

            i--;

      }

      printf("\nend\n");

      return 0;

}

2018. szept. 19. 21:41
Hasznos számodra ez a válasz?
1 2

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!