Informatică, întrebare adresată de CiobanuDan2007, 9 ani în urmă

Să se insereze în șir înaintea fiecărui element pătrat perfect rădăcina sa pătrată..

De ce este gresit acest algoritm ?

#include

#include

using namespace std;

int v[31],i,x,n,j,;

int main()

{cin>>n;

for(i=1;i<=n;i++)

cin>>v[i];

i=1;

while(i<=n)

{x=v[i];

if(x==(int)sqrt(x)*(int)sqrt(x))

{for(j=n;j>=i-1;j--)

v[j+1]=v[j];

v[i-1]=(int)sqrt(x);

n++;

i=i+2;}

else i++;}

for(i=1;i<=n;i++) cout<return 0;

}


carat033: Daca vrei pot face eu programul de la 0, si te poti verifica cu al meu, voi incerca sa folosesc aceleasi variabile.
carat033: In principiu ai o virgula dupa j, la #include nu ai nimic, pe ultimul rand nu poti scrie cout << return 0, trebuie sa scrii cout << si variabila sau ceva ce se poate tiparii.
CiobanuDan2007: Am gasit greseala , am rezolvat

Răspunsuri la întrebare

Răspuns de 1Viserys
4

cand verifici daca numarul este patrat perfect, in if ai v[i-1]= radacina dar v[i-1] nu ne intereseaza, tu l-ai mutat pe v[i] in v[i+1] astfel incat sa-i faci loc lui sqrt(x) in v[i], pozitia imediat anterioara.

inlocuieste v[i-1]=sqrt(x); cu v[i]=sqrt(x); si e ok (int(sqrt) e irelevant deoarece stii deja ca e patrat deci radacina e intreaga)

daca ai peste 15 numere in vector s-ar putea sa depasesti dimensiunea (daca sunt toate patrate, dar asta se rezolva daca declari vectorul de 100 sau macar de 50).

also in declararea variabilelor ai o virgula intre j si ";", scapa de ea ca da eroare.

Alte întrebări interesante