A szám négyzetszám-e?
Valamiért nem működik a program. Mindenre azt írja, hogy négyzetszám. Mi lehet a hiba.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int szam, i, jelzo;
jelzo = 0;
printf("Adj meg egy egesz szamot!");
scanf("%d", &szam);
for (i = 2; i < szam; i = i + 1)
if (i*i == szam)
{
jelzo = 1;
}
if (jelzo = 1)
{
printf("Negyzet szam");
}
else
{
printf("Nem negyzet szam");
}
system("pause");
return 0;
}
"Egyébként ahhoz neked nem kell ciklus, hogy eldöntsd, hogy egész-e a négyzetgyöke."
"Amúgy igen, meg lehet ciklus nélkül is csinálni egy pici trükközéssel, de a ciklus használata nevezhetőa legkézenfekvőbb megközelítésnek. Nem veszít vele sok időt, a gyökkeresés N függvényében logaritmikus."
Ciklus van az sqrt implementációjában is. Ha már futási idő elemzést csinálunk, akkor ebben a formában N függvényében lineáris idejű, ha végigmegy N-ig, vagy N/2-ig. Ha megállna ha a ciklusváltozó négyzete pont N vagy ha ilyen nincs és túlment rajta akkor lenne gyökös idejű.
Ha sqrt-vel csinálja az logaritmikus idejű (ordóba).
De rég foglalkoztam már a jó öreg c-vel ...
Én megoldásom : [link]
"Ha olyan hiperhatékony akarok lenni, akkor egyetlen egyszer kipörgetem az összes ábrázolható (vagy szóba jövő) négyzetszámot egy böhöm vektorba, és B-fában tárolom. :)"
Nem biztos hogy olyan "hiperhatékony" lenne az, csak bizonyos premisszák esetében.
Ha gyakorlati szempontból vizsgálom a futási időt, akkor figyelembe veszem hogy hányszor használja. Ha kevésszer akkor nem feltétlen térül meg az az plusz idő ami idő alatt legenerálni az összes szóba jöhető négyzetszámot és berakni egy B fába. Továbbá mindig be kell olvasni futtatás kezdetekkor ami plusz overhead ... Nem beszélve arról ha olyan prog. nyelv lenne ahol szinte bármekkora lehet egy integer, gyakorlatilag fizikai korlát ami a korlátozó tényező, na ott próbáld legenerálni az összes négyzetszámot és tárolni is.
Elszoktam a c buta primitív számkezelésétől. Egy korrekció.
Túlcsordulás miatti védelem ha 32 bites az int az aktuálisan lefordított kódban: [link]
Hülye vagyok.
Erről beszéltem : [link]
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!