programma numero 1: In un determinato intervallo un e b dove un < = b, voglio trovare se un numero è una quare perfetta, se sì allora stampa la sua radice. Pertanto, ho scritto il seguente codice:quadrati perfetti in un dato intervallo: esecuzione anormale di loop
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
float squaredroot(int n) {
float low = 0.0, mid;
float high = (float)n+1;
while ((high-low) > 0.00001) {
mid = (low+high)/2;
if (mid*mid < n) {
low = mid;
}
else {
high = mid;
}
}
return low;
}
int main() {
int a,b,i=0; cin>>a>>b;
float roo=0.0;
for(i=a;i<=b;i++){
roo=squaredroot(i);
if(floor(roo)==roo){
cout<<roo<<endl;
}
}
return 0;
}
Per la data di ingresso 1 5
l'uscita dovrebbe essere 2
. Ma il programma sopra non sta stampando alcun valore.
Tuttavia, quando ho provato in esecuzione un altro programma utilizzando lo stesso concetto base come numero Programma 1, che è già accennato, è stato eseguito perfettamente. L'attività per il seguente programma è di verificare se l'input è un quadrato perfetto o meno. Se sì, stampa la radice del numero, altrimenti stampa "Non un quadrato perfetto!". Ecco il codice per il numero Programma 2:
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
using namespace std;
float squaredroot(int n) {
float low = 0.0, mid;
float high = (float)n+1;
while ((high-low) > 0.00001) {
mid = (low+high)/2;
if (mid*mid < n) {
low = mid;
}
else {
high = mid;
}
}
return low;
}
int main() {
int a; cin>>a;
float roo=0.0;
roo=squaredroot(a);
if(floor(roo)==roo){
cout<<roo<<endl;
}
else{
cout<<"Not a perfect square!"<<endl;
}
return 0;
}
non sono in grado di trovare l'errore nel primo programma. Per favore aiuto.
Se siete interessati a numeri interi, perchè si usa * * galleggiante? Il tipo float è sufficiente per calcoli semplici in cui è possibile accettare alcuni errori di arrotondamento; ma da nessun'altra parte non è altro che guai. –
@Gyro Gearloose Ci possono essere molti modi possibili per risolvere il problema precedente. Ma l'intenzione principale di porre questa domanda è sapere perché il ciclo _for_ e/o _if_ nel ** Programma 1 ** si sta comportando in modo anomalo. Post scriptum Modificato di conseguenza il titolo della domanda. –