Buna

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Buna

Post by yoyulian » 10 Mar 2013, 17:33

Buna ma poate ajuta si pe mine sa imi rezolve problema aceasta, ca un imi afiseaza rezultatulș deci nu am nici o eroare la compilare(folosesc microsoft visual studio 2008).
Poate nu am facut exact cu cerea cerinta, dar altcumva nu am stiut, daca puteti sa imi rezolvati problema la ceea ce am facut as fi multumit.



/*12.Folosind o func?ie recursivă, calcula?i suma valorilor introduse de la tastatură cu confirmare,
adică cere?i utilizatorului să indice dacă mai dore?te să mai introducă o nouă valoare sau nu.
Modifica?i func?ia pentru a calcula ?i afi?a, ?i media valorilor date de utilizator. Semnala?i
printr-un mesaj când suma valorilor depă?e?te o anumită valoare prestabilită.*/



//directive procesor
#include<stdio.h>

#include <iostream>

using namespace std; //specifica utilizarea de spatiu standard


#include <conio.h> //bibilioteca standard pentru functia getche(), getch()


float media(int n,int v[]) //functia care calculeaza madia numerelor introduse cu confirmare

{

double x,suma=0.0,Ma,aux; //definirea datelor de tip double
aux=n;

for(int i=0;i<n;i++)
{
suma+=v;
aux--;
}

return Ma=suma/n;
}


float suma(int v[], int n) //functia pentru calcularea a n numere pozitive
{

int sum=0; //definirea datelor de tip double

for (int i = 0; i <= n; i++)
{

sum+=v;
}

return sum;
}


void main() //la fel si aici si pot cauza unele erori
{
int n,i=0,v[100],opt; //declararea datelor de tip intreg

cout<<"Introduceti niste numere:";
cin>>n; //citirea lui n
for(;i<n;i++)
{
printf("\n\telementul[%d]:",i+1);
cin>>v; //citirea elementelor in functie de n
}

printf("Suma numerelor n=%d introduse este:%d\n",n,suma(v,n)); //afisarea sumei numerelor introduse
printf("Media peuntru n=%d, este:%.2f\n",n,media); //afisarea mediei numerelor introduse cu confirmare
cout<<"\n\t------------Apasati orice tasta pentru a continua!!!------------------\n";
getch();


if(n>3) //daca n este mai mare decat 3 atunci se intreaba daca se mai doreste sa se mai introduca alte numere
{

cout<<"Doriti sa mai introduceti numere:\n";

cout<<"\n\tApasati tasta 1 pentru a afla media sau tasta \n\t\t 2 pentru a afla suma numerelor introduse(succes):";

do
{
cin>>opt;
if(opt>2||opt<1) // nu este tastat 1 sau doi afiseaza urmatorul mesaj
cout<<"\n\t\t------Tasta gresita!!!---------";
else break;
}
while(true);
if(opt==1) //daca este tastat 1 se ce introducerea numerelor
{
cout<<"Introduceti numerele:";

cin>>n; //introducerea numerelor

for(;i<n;i++)
{
printf("\n\telementul[%d]:",i+1);
cin>>v; //citirea numerelor in functie de n
}
}

else
{
printf("Suma numerelor n=%d introduse este:%.2f",n,suma(v,n)); //suma a n numere introduse

printf("Media peuntru n=%d, este:%.2f\n",n,media); //afisarea mediei numerelor introduse

cout<<"\n\t------------Apasati orice tasta pentru a continua!!!------------------\n";
getch();
}
}
}




Multumesc si sper sa reusit sa ma ajutati. Va rog sa imi si explicati unde am gresit, fie prin comentarii exact la functia care am gresit , sau cum doriti dumneavoastra.



yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Re: Buna

Post by yoyulian » 10 Mar 2013, 22:09

nu stie numeni sa ma ajute

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: Buna

Post by neagu_laurentiu » 10 Mar 2013, 23:27

Pentru astfel de probleme s-a inventat debugger-ul. Si vezi cu el executia pas cu pas, inspectezi variabilele, consulti rezultatul, descoperi problema cu alte cuvinte.

Daca faci suma celor n elemente nu mergi pana la n inclusiv (de la 0 la n ai mai multe valori decat ai citit) ci pana la i<n:

Code: Select all

float suma(int v[], int n)  //functia pentru calcularea a n numere pozitive
{ 
  for (int i = 0; i <= n; i++)
...
Ai uitat sa apelezi functia media() cu parametrii in cauza, asa cum ai facut la suma():

Code: Select all

printf("Media peuntru n=%d, este:%.2f\n",n,media);   //afisarea mediei numerelor introduse cu confirmare
In rest mult cod balast dar asta se va rezolva cu timpul, probabil.

yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Re: Buna

Post by yoyulian » 11 Mar 2013, 00:02

Mersii mult, am reusit sa fac pentru amandoua mersii mult. Dar nu merge cand se face in if optiunea 1 daca te uiti in program cand te intreaba alege 1 sau 2 cand testezi 1 si introduc numerele nu se mai repeta in functie de n. Da la ce referi ca e mult cod blasat, te referi la comentarii sau??? Mersi inca o data, ma mai poti ajuta ca mai am probleme.

User avatar
black_atus
Membru
Membru
Posts: 139
Joined: 20 Jun 2012, 10:20
Judet: Prahova
Location: Ploiesti

Re: Buna

Post by black_atus » 12 Mar 2013, 10:37

La prima vedere cred ca ar trebui sa reinitializezi "i"-ul cu 0 pentru ca ramane cu valoarea lui "n" de la primul for. Sfatul meu e sa faci initializarea mereu in for deoarece cand ai mai multe for-uri "i"-ul poate ramane cu valoarea de dinainte cum pare ca se intampla in programul tau. De ce nu folosesti for(i = 0; i < n; i++) ? Asa nu o sa te mai preocupe variabila "i" ...
Cu stima,
Daniel Constantin

yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Re: Buna

Post by yoyulian » 12 Mar 2013, 22:49

mersii mult

tudor_t
Membru
Membru
Posts: 112
Joined: 26 Aug 2007, 15:11

Re: Buna

Post by tudor_t » 13 Mar 2013, 10:46

În plus, niște cursuri de limba română nu ar strica.. :)

Post Reply