RSS

Media aritmetică versiunea 2.0

02 Apr

Aplicând sugestia lui zaqk am optimizat algoritmul care calculează media aritmetică a “n” numere…astfel, de la 2 instrucţiuni FOR am redus  algoritmul la una singură🙂

#include<iostream.h>
#include<conio.h>
int main( )
{ int n,i,v[100],suma=0,numar=0;
float media;
cout<<"n= "; cin>>n;

for(i=1;i<=n;i++)
{ cout<<"v["<<i<<"]=";
cin>>v[i];
suma=suma+v[i];
numar++;  }

media= (float) suma/numar;
cout<<"Media aritmetica a numerelor introduse este: "<<media;
getch( ); }
 
12 Comments

Posted by on April 2, 2011 in Uncategorized

 

Tags: ,

12 responses to “Media aritmetică versiunea 2.0

  1. zaqk

    April 2, 2011 at 14:15

    🙂
    mai bine, dar ramane problema array-ului de 20 de elemente in care eu as vrea sa bag, de ex, 21…🙂

     
  2. r4dhu

    April 2, 2011 at 14:17

    aaaa…da, păi pot să pun v[100]😛 şi o să meargă introduse 100 de numere

     
  3. zaqk

    April 2, 2011 at 23:13

    si daca userul introduce 101 numere, iar esti in aceeasi situatie.
    solutia nu este sa maresti spatiul de depozitare la infinit🙂

    la o prima vedere, sunt 2 solutii pe care le poti aplica. Sa vedem daca stii care sunt alea (sau poate stii tu altele doua) care rezolva problema enuntata de mine🙂

    PS. Rule no1 al unui program este sa fie unbreakable. Iar daca totusi i se ating limitele, sa isi revina usor dupa aceea🙂

     
  4. r4dhu

    April 2, 2011 at 23:33

    Sincer, nu ştiu …programarea nu e punctul meu forte(deşi e foarte interesantă,trebuie să recunosc) …am făcut un pic de programare la facultate ( C++) dar nu am studiat în profunzime…🙂

    Poate mă poţi ajuta tu cu nişte sugestii🙂

     
  5. zaqk

    April 2, 2011 at 23:57

    1. o solutie care nu presupune pastrarea numerelor pentru o procesare ulterioara:

    f#include
    #include
    int main( )
    { int n,i,v,suma=0,numar=0;
    float media;
    cout<>n;

    for(i=1;i<=n;i++)
    { cout<<"v["<<i<>numar;
    suma=suma+numar;}

    media= (float) suma/n;
    cout<<"Media aritmetica a numerelor introduse este: "<<media;
    getch( ); }

    2. alta solutie, pentru folosirea ulterioara a numerelor, folostesti o lista. Nu mai stiu exact in C++ cum se face, dar stiu ca exista liste🙂

    PS. Limbajul este C++, Dev C++ se numeste IDE-le cu care lucrezi. Bun, el duce si C simplu🙂

     
  6. r4dhu

    April 2, 2011 at 23:57

    M-am gândit totuşi la o posibilă soluţie…dacă pun v[ ] ar trebui să meargă indiferent de câte numere sunt introduse, nu?

     
  7. zaqk

    April 2, 2011 at 23:59

    Mi-a taiat din cod din cauza tag-urilor!

    Ideea este asa: in loc sa citesti in v[i], citesti in numar pe care il aduni apoi la suma. Pe numar nu il mai folosesti pentru a sti cate numere s-au citit, pentru ca il ai pe n. Oricum, nu se iese din for pana nu s-au citit toate numerele (pana la n)

     
  8. r4dhu

    April 3, 2011 at 00:02

    aha…am înţeles…mulţumesc pentru sugestie😉

     
  9. zaqk

    April 3, 2011 at 00:04

    daca pui v[] atunci ai un array caruia nu i-ai definit o dimensiune. O sa iti dea eroare! Array-ul are limitarea ca trebuie sa ii spui cate elemente sunt in el!
    Unele limbaje permit extinderea array-urilor runtime, insa este o operatie consumatoare de timp!
    Eu prefer elementele dinamice (liste, de ex) pentru ca sunt mult mai rapide🙂

     
  10. Adi

    April 3, 2011 at 00:42

    Nu poti declara un array fara dimensiune decat daca il initializezi la declarare:
    int v[] = {1, 2, 3};

    Sunt de acord cu zaqk in principiu, desi, a folosi liste in situatia asta mi se pare inutil. Poti folosi pointeri si iti aloci memoria dinamic in functie de numarul de numere dorit de utilizator.

    int* v;
    int n;
    cout <> n;
    v = new int[n];

    Apoi folosesti pointerul exact cum folosesti un array normal.

    Cel mai bine este totusi sa nu pastrezi numerele in nici un fel de structura. Solutia cea mai eficienta, dupa cum a spus si zaqk este sa procesezi numerele in timp ce le citesti.

    Aaa … si inca ceva. Primul index al unui vector este 0, si intr’un for mergi pana la n-1 (n fiind dimensiunea vectorului). Daca mergi de la 1 pana la n, excluzi primul element, si in acelasi timp accesezi memorie nealocata.

     
  11. Adi

    April 3, 2011 at 00:45

    MI’a fost taiat ceva cod din comment se pare. Partea in care citeam variabila n. Intelegi tu cout, cin …

     
  12. r4dhu

    April 3, 2011 at 01:31

    Salut Adi…long time no see… Mulţumesc şi ţie pentru sugestii ;)…până la urmă am implementat varianta sugerată de zaqk

     

Lasă un comentariu

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: