Jump to content

Unde e greseala?


 Share

Recommended Posts

Salutare B-Zone,

 

Am rezolvat o problema care cerea aflarea C.M.M.D.C al unui sir, dar nu a iesit exact cum trebuie si as dori sa imi spuneti unde am gresit (cel mai probabil la declararea variabilelor a si b).

#include <iostream>

#include <math.h>

using namespace std;

 

int main() {

int v[11], n, i;

cout << "n=";

cin >> n;

int a=1, b=1;

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

cout << "V[" << i << "]=";

cin >> v;

}

cout << "C.M.M.D.C al elementelor din vector este ";

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

 

if (a*b == 0)

cout << "C.M.M.D.C=" << a + b;

else {

while (a != b) {

if (a > b)

a = a - b;

else

b = b - a;

}

}

}

cout << a << endl;

 

return 0;

}

 

Si inca o problema ar mai fi: Am rezolvat o problema care imi cerea sa verific daca un sir are aspect de munte (numerele sunt crescatoare pana la o valoare maxima, iar apoi descrescatoare pana la sfarsit). Mai jos este ce am facut eu si am semnalat cu "////////////////" unde nu am stiut ce sa execut.

 

#include <iostream>

#include <math.h>

#include <string>

using namespace std;

 

int main() {

int v[101], i, n;

cout << "Numarul de elemente ale sirului este: ";

cin >> n;

 

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

cout << "V[" << i << "]= ";

cin >> v;

}

 

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

cout << v <<" ";

 

int max = v[0];

int poz;

 

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

if (max > v)

v = max;

else

{

max = v;

poz = i;

}

}

cout << "Maximul este " << max << endl;

 

for (i = 1; i <= poz; i++) {

if (v > v[i - 1])

//////////////////////////////////////////////////////////////////

else

cout << "Sirul nu are forma de munte";

 

}

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

if (v < v[i + 1])

//////////////////////////////////////////////////////////////////

else

cout << "Sirul nu are forma de munte";

}

 

return 0;

 

}

Mai departe cum as putea sa scriu ceva de genu:

Atunci cand primul for si cel de al doilea sunt indeplinite simultan, Sirul are forma de munte (am impresia ca stiu, dar nu imi vine in minte acum).

 

Multumesc anticipat.

Link to comment
Share on other sites

Prima greseala e ca nu iti indentezi codul.

 

La prima problema tu initializezi variabilele a si b cu 1, iar pe parcursul algoritmului nu le mai atribui valori din vectorul tau. Adica, pentru orice valori citite, programul tau va afisa 1 de fiecare data. Pe langa asta, nu inteleg ce ai vrut sa faci cu if (a*b == 0) care va fi adevarat doar cand unul din numerele citite este 0 (in conditiile in care algoritmul ar fi corect) si atunci nu mai are rost sa continui pentru ca rezultatul e 0, dar nu cred ca are rost sa te complici cu asta deocamdata. Ca ultima observatie, daca ti-am inteles bine ideea, for-ul tau trebuie sa se execute de n-1 ori. Presupun ca intelegi de ce.

 

La problema a doua tu citesti vectorul de la 1 la n si apoi ii atribui variabilei max valoarea lui v[0]. Mai departe nu inteleg ce vrei sa faci. In primul if faci v=max si pierzi valori din vector, iar apoi verifici daca elementele vectorului sunt in pozitia dorita, ceea ce nu se va intampla, mai ai un alt for dupa caruia nu ii inteleg logica... In fine, nu stiu ce ai vrut sa faci, dar ca sa iti da o idee de rezolvare care imi vine acum pe moment, ia un for de la 1 la n in care verifici numerele doua cate doua sa fie crescatoare. Cand gasesti primele doua numere descrescatoare inseamna ca ai gasit presupusul varf, iar de acolo toate trebuie sa fie descrescatoare. Daca nu sunt, inseamna ca sirul nu are aspect de munte.

 

P.S. La ce iti trebuie bibliotecile math si string?

 

Apropo, ar trebui sa inveti sa faci debugging.

Edited by Sebby
Link to comment
Share on other sites

Prietene , mai mult te complici.

Ce cauta cele 2 librarii ?

Foloseste doar <iostream> si mai redu din date.

O intrebare! Probleme sunt din culegerea "Culegere de probleme pentru clasele IX-XI" de Carmen Popescu , nu?

Link to comment
Share on other sites

Prietene , mai mult te complici.

Ce cauta cele 2 librarii ?

Foloseste doar <iostream> si mai redu din date.

O intrebare! Probleme sunt din culegerea "Culegere de probleme pentru clasele IX-XI" de Carmen Popescu , nu?

 

math.h am inclus din obsinuinta, iar string... la inceput am avut o idee care s-a dovedit a nu avea legatura si nu am mai sters libraria.

Da.

Prima greseala e ca nu iti indentezi codul.

 

La prima problema tu initializezi variabilele a si b cu 1, iar pe parcursul algoritmului nu le mai atribui valori din vectorul tau. Adica, pentru orice valori citite, programul tau va afisa 1 de fiecare data. Pe langa asta, nu inteleg ce ai vrut sa faci cu if (a*b == 0) care va fi adevarat doar cand unul din numerele citite este 0 (in conditiile in care algoritmul ar fi corect) si atunci nu mai are rost sa continui pentru ca rezultatul e 0, dar nu cred ca are rost sa te complici cu asta deocamdata. Ca ultima observatie, daca ti-am inteles bine ideea, for-ul tau trebuie sa se execute de n-1 ori. Presupun ca intelegi de ce.

 

La problema a doua tu citesti vectorul de la 1 la n si apoi ii atribui variabilei max valoarea lui v[0]. Mai departe nu inteleg ce vrei sa faci. In primul if faci v=max si pierzi valori din vector, iar apoi verifici daca elementele vectorului sunt in pozitia dorita, ceea ce nu se va intampla, mai ai un alt for dupa caruia nu ii inteleg logica... In fine, nu stiu ce ai vrut sa faci, dar ca sa iti da o idee de rezolvare care imi vine acum pe moment, ia un for de la 1 la n in care verifici numerele doua cate doua sa fie crescatoare. Cand gasesti primele doua numere descrescatoare inseamna ca ai gasit presupusul varf, iar de acolo toate trebuie sa fie descrescatoare. Daca nu sunt, inseamna ca sirul nu are aspect de munte.

 

P.S. La ce iti trebuie bibliotecile math si string?

 

Apropo, ar trebui sa inveti sa faci debugging.

In primul for, am vrut sa verific daca numerele de la pozitia 1 la pozitia maximului sunt crescatoare, iar cu al doilea for am vrut sa verific daca numerele de la pozitia maximului +1 pana la capat sunt descrescatoare.

Edited by pH Ic3Box
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.