C-ben miért nem működik "ez" a ciklus?
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");
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++;
}
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;
}
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!