Jump to content

Recommended Posts

Posted

Ne-a predat asta subfunctiile, am facut niste chestii micute pana acum.

Acum ne-a predat "Transmiterea parametrilor" si din moment ce vorbeste cu noi doar in termeni stiintifici si nu explica nimic pe romaneste, va dati seama singuri de ce am deschis topicul asta :))

a scris un programel in care la subfunctie a folosit void si nu pot sa-mi dau seama care e diferenta daca ar fi folosit void sau int de exemplu.

Aici e programul.

#include<iostream>
using namespace std;
void f(int a, int b);
int main()
{int x=2,y=4;
cout<<"x ="<<x<<" ; "<<"y= "<<y;
f(2+x, y+3);

cout<<"x= "<<x<<" ; "<<"y= "<<y;

return 0;}
void f(int a, int b)
{
    a++;
    b=b+4;
    cout<<"a= "<<a<<" ; "<<"b= "<<b;
}

cred ca a vrut sa ne demonstreze ca variabilele asta x si y din programul de mai sus, nu isi pastreaza valoarea din subprogram o data cu terminarea subprogramului si reiau valorile din int main. Am dreptate?

si se foloseste void asta cand nu returnezi nimic?

poti sa returnezi intr-un subprogram mai multe variabile? 

pentru un program simplu de calculat suma elemntelor unui vector de exemplu, e mai eficient sa fie creat cu o subfunctie care calculeaza suma, sau e mai eficient dc se scrie totul in main? sau e la fel de eficient? 

thx for reading.

  • Moderators
Posted

cred ca a vrut sa ne demonstreze ca variabilele asta x si y din programul de mai sus, nu isi pastreaza valoarea din subprogram o data cu terminarea subprogramului si reiau valorile din int main. Am dreptate?

Exact. Sunt transmise defapt niste copii (nu se aplica si daca trimiti ca parametru un vector). Ai sa inveti si transmiterea prin referinta :).

si se foloseste void asta cand nu returnezi nimic?

Da. (daca ai o functie void F(int x) de exemplu, nu o poti folosi drept valoare, gen cout<<F(3) sau if(F(3) == 23). Daca aveai in schimb int F(int x), te puteai folosi de valoarea returnata (gen, daca returna 3 la x=4, cout<<F(4) afisa 3, if (F(4) == 3) era adevarata, etc)

poti sa returnezi intr-un subprogram mai multe variabile? 

Prin return nu. Insa poti stoca intr-un vector valorile de care ai nevoie.

pentru un program simplu de calculat suma elemntelor unui vector de exemplu, e mai eficient sa fie creat cu o subfunctie care calculeaza suma, sau e mai eficient dc se scrie totul in main? sau e la fel de eficient? 

E la fel de eficient, dar te ajuta sa nu faci o varza in main care sa fie greu de inteles, impartind problema in sub-probleme.

Posted

ms mult courage

deci daca folosesc o matrice X in main, si o modific intr-o subfunctie, matricea isi va pastra valoarea dupa ce a fost modificata?  

sa-mi bag banii, daca stiam asta nu ma apucam sa scriu programul asta:

#include<iostream>
using namespace std;
int m,n,g, contor,contor2;
void citire(float v[10][10]);
void afisare(float v[10][10]);
void suma(float v[10][10],float x);
void diferenta(float v[10][10], float x);
void produs(float v[10][10], float x);
void cat(float v[10][10], float x);
void suma2(float v[10][10],float p[10][10]);
void diferenta2(float v[10][10],float p[10][10]);
void produs2(float v[10][10],float p[10][10]);
int main()
{float x[10][10],y[10][10],z[10][10],k;
    cout<<"Introduceti numarul de linii: ";cin>>m;
    cout<<"Introduceti numarul de coloane: ";cin>>n;
    cout<<"Introduceti numarul de coloane pentru matricea produs: ";cin>>g;
    cout<<"Introduceti prima matrice: ";
    citire(x);
    cout<<"Introduceti a doua matrice: ";
    citire(y);
    cout<<"Introduceti a III-a matrice (cea care se va inmulti cu prima matrice): ";
    citire(z);
    cout<<"Introduceti scalarul cu care se vor aduna, scadea, inmulti, imparti matricile: ";
    cin>>k;
    cout<<" k + prima matrice = \n";suma(x,k);
    cout<<" k + a doua matrice = \n";suma(y,k);
    cout<<" k - prima matrice= \n";diferenta(x,k);
    cout<<" k - a doua matrice= \n";diferenta(y,k);
    cout<<" k X  prima matrice= \n";produs(x,k);
    cout<<" k X a doua matrice= \n";produs(y,k);
    cout<<" prima matrice / k = \n";cat(x,k);
    cout<<"a doua matrice / k = \n";cat(x,k);
    cout<<"prima matrice + a doua matrice= \n";suma2(x,y);
    cout<<"prima matrice  - a doua matrice= \n";diferenta2(x,y);
    cout<<"prima matrice X a doua matrice= \n";produs2(x,y);
return 0;}
void citire(float v[10][10])
{
    int i,j;
     contor++;
    if (contor!=3)
         {
            for(i=1;i<=m;i++)
              for(j=1;j<=n;j++)
               /*cout<<"v [ "<<i<<" ] [ "<<j<<" ] = ";*/cin>>v[i][j];
         }
     else  for(i=1;i<=n;i++)
             for(j=1;j<=g;j++)
                cin>>v[i][j];

}
void afisare(float v[10][10])
{
    int i,j;
    for(i=1;i<=m;i++)
    {
         for(j=1;j<=n;j++)
          cout<<v[i][j]<<" ";
           cout<<"\n";
       }
}
void suma(float v[10][10],float x)
{
    int i,j;
    for(i=1;i<=m;i++)
    for(j=1;j<=n;j++)
    v[i][j]+=x;
    afisare(v);
}
void diferenta(float v[10][10], float x)
{
    int i,j;
    for(i=1;i<=m;i++)
    for(j=1;j<=n;j++)
    v[i][j]-=x;
    afisare(v);
}
void produs(float v[10][10], float x)

{ contor2++;
    int i,j;
    for(i=1;i<=m;i++)
    for(j=1;j<=n;j++)
    v[i][j]*=x;
    if(contor2!=3)afisare(v);
}
void cat(float v[10][10], float x)
{
    int i,j;
    for(i=1;i<=m;i++)
    for(j=1;j<=n;j++)
    v[i][j]/=x;
    afisare(v);
}
void suma2(float v[10][10],float p[10][10])
{
      int i,j;
      float c[10][10];
    for(i=1;i<=m;i++)
    for(j=1;j<=n;j++)
    c[i][j]=v[i][j]+p[i][j];
    afisare(c);
}
void diferenta2(float v[10][10],float p[10][10])
{  produs(v,(-1));
    int i,j;
      float c[10][10];
    for(i=1;i<=m;i++)
    for(j=1;j<=n;j++)
    c[i][j]=v[i][j]+p[i][j];
    afisare(c);
}
void produs2(float v[10][10],float p[10][10])
{
    int i,j,k;
      float c[10][10];
       for(i=1;i<=m;i++)
          for(j=1;j<=g;j++)
    {
        c[i][j]=0;
        for(k=1;k<=n;k++)
        c[i][j]+=v[i][k]*p[k][j];
     }
    afisare(c);
}

eu eram cu gandul ca matricea nu isi pastreaza valoarea daca o modific in subfunctie, ca orice alta variabila.

Ba si cand dadeam cout imi venea sa pic de pe scaun :)))))

 

Posted

Da, matricea isi pastreaza valoarea modificata.

 

Daca vrei o explicatie, ar fi ceva de genu: vectorul reprezinta o zona de memorie continua in care poti pune niste date. Fiind continua, stiu ca elementul a este inaintea lu a+1. Deci daca stiu adresa din memorie a lu 'a' si mai adaug 1 (aici 1 reprezinta cat ocupa 1 element din acel vector), obtin adresa lu a+1. 

 

Deci tu cand trimiti ca parametru un vector, tu defapt trimiti doar adresa de inceput a lui. Aceea nu o poti modifica, dar valoarea stocata se modifica.

 

Cand trimiti un int normal, atunci nu trimiti adresa acelei valori, ci trimiti efectiv valoarea. Deci daca undeva in memorie ai un a=5, o sa trimiti valoarea 5, care nu mai e legata deloc de 'a'.  Mai incolo o sa inveti despre transmiterea prin referinta (folosind & inainte variabilei) dar la urma urmei si ala trimite doar o valoare, doar ca trimite valoarea adresei de memorie unde se afla variabila ta.

 

Din pacate nu le am deloc cu explicatul, deci e o mare sansa sa nu fi inteles mare lucru :))

love is a verb
Love is a doing word

  • gaby changed the title to Intrebari subfunctii din transmiterea parametrilor
  • 4 weeks later...
Posted

Am invatat in cele din urma si care e treaba cu transmiterea prin referinta si care e treaba cu adresele si valorile astea, are destul de multa logica, pacat ca nu are cine sa-mi explice calumea si la clasa :))

Momentul ala cand mai bine statea acasa si ma uitam pe net la tutoriale de c++ decat sa fac cu profa... 

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • 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.