Răspuns :
Răspuns:
#include <iostream>
#include<math.h>
using namespace std;
int main() {
int n=1, suma=0,i=0,per=0;//date de intrare
while(n!=0)//cat timp n nu este egal cu 0 bucla while continua sa ruleze
{
cin>>n;
while(per<n)//cat timp per este mai mic decat n bucla while continua sa ruleze
{
i++;//valaorea variabilei de tip int i se mareste cu +1 dupa fiecare rulare a buclei
per=pow(i,2);//per este egal cu i la puterea 2
}
if(per==n)//daca n este egal cu per atunci n este patrat perfect
{
suma+=per;//valaorea variabilei suma se mareste cu +per
}
i=0;
per=0;
cout<<endl;
}
cout<<suma;//programul afiseaza suma numerelor care sunt patrate perfecte
return 0;
}
Explicație:
Raspuns (C):
#include <stdio.h>
#include <math.h>
int main() {
int x;
int suma = 0;
do {
scanf("%d", &x);
if ((int)sqrt(x) == sqrt(x))suma += x;
} while (x != 0);
printf("\nSuma numerelor patrate perfecte este %d", suma);
}
Explicatie :
sqrt(x) -> Returneaza o valoare reala care reprezinta radacina patrata a lui x
(int) -> Conversie explicita la tipul int : Converteste valoarea care urmeaza dupa (int) la tipul intreg. Eu il folosesc aici pentru a afla partea intreaga a valorii lui [tex]\sqrt{x}[/tex]. Puteam de asemenea folosi functia floor().
Un numar x natural este patrat perfect daca si numai daca [tex]\sqrt{x} =[ \sqrt{x}][/tex], unde [tex][\sqrt{x} ][/tex] reprezinta parte intreaga din x
Ai demonstratie in imaginea atasata.
![Vezi imaginea Andrei750238](https://ro-static.z-dn.net/files/d62/abd6c79257d092f3439cd48d8960c91f.png)