Jump to content
xLevel

Ajutor va rog! C++ Functii,subprograme

Recommended Posts

Sint date 2 masive unidimensionale x[k] si y[m]. De calculat valoarea expresiei z=(xmax-ymin)/(ymax-xmin),unde xmax si xmin sint valorile elementelor maximal si minimal din masivul x, iar ymax si ymin sint valorile elementelor maximal si minimal din masivul y.

 

Folosirea subprogramului pentru:

Determinarea valorilor elementelor maximale si minimale pentru ambele masive.

 

 

Ajutati-ma va rog, macar cu idei si sugestii!

Multumesc anticipat!

Link to comment
Share on other sites

  • Active Members
22 minutes ago, 3t3r4n said:

Un mic exemplu:


#include <stdio.h>

int minim(int *vector, int size){
    int minim=vector[0];
    for(int i=0;i<size;i++){
        if(minim>vector[i])
            minim=vector[i];
    }
    return minim;
}


int main()
{
    int a[10]={9,8,7,6,5,4,3,2,-31,3};
    printf("%d",minim(a,10));

    return 0;
}

 

 

1. Asta e C, nu C++.

2. Functia nu ar trebui sa primeasca size ca argument - daca am un vector care contine n elemente unde n e un numar foarte mare, ce fac ? Ma apuc si numar elementele de nebun ca sa stiu cat sa aloc pentru argument? Nu mai bine aloci dinamic un vector de marime n, unde n este dat de la tastatura ? 

 

Anyway, ar trebui ca asta sa-si faca o idee chiar daca pe chat a supt-o si a vrut mura-n gura :) 

 

Link to comment
Share on other sites

8 minutes ago, MrGrj said:

 

1. Asta e C, nu C++.

2. Functia nu ar trebui sa primeasca size ca argument - daca am un vector care contine n elemente unde n e un numar foarte mare, ce fac ? Ma apuc si numar elementele de nebun ca sa stiu cat sa aloc pentru argument? Nu mai bine aloci dinamic un vector de marime n, unde n este dat de la tastatura ? 

 

Anyway, ar trebui ca asta sa-si faca o idee chiar daca pe chat a supt-o si a vrut mura-n gura :) 

 

Cum stii cate elemente are vectorul daca nu trimiti si marimea lui?

Link to comment
Share on other sites

  • Active Members
2 minutes ago, Byte-ul said:

Cum stii cate elemente are vectorul daca nu trimiti si marimea lui?

 

Vrei sa-mi spui ca daca ai int minim(int *vector) nu se poate ?

 

N-ai inteles ce vreau sa zic. Las-o asa sau mai citeste o data ce-am vrut sa zic.

Link to comment
Share on other sites

Salutare !

#include <iostream>

using namespace std;

void minmax_rst(int[], int);
int main()
{
    int n, m;

    cin>>n>>m;
    int a[n], b[m];

    for(int i=0; i<n; i++)
        cin>>a[i];
    for(int i=0; i<m; i++)
        cin>>b[i];
    minmax_rst(a, n);
    minmax_rst(b, m);
    return 0;
}

void minmax_rst(int x[], int marime)
{
    int minn=x[0], maxx=x[0];

    for(int i=0; i<marime; i++)
    {
        if(minn > x[i])
            minn = x[i];
        if(maxx < x[i])
            maxx = x[i];
    }
    cout<<minn<<' '<<maxx;
    cout<<'\n';
}

 

Link to comment
Share on other sites

@Byte-ul: Cred ca @MrGrj se referea la folosirea clasei template vector care contine ca si membru dimensiunea.

 

4 hours ago, MrGrj said:

 

1. Asta e C, nu C++.

2. Functia nu ar trebui sa primeasca size ca argument - daca am un vector care contine n elemente unde n e un numar foarte mare, ce fac ? Ma apuc si numar elementele de nebun ca sa stiu cat sa aloc pentru argument? Nu mai bine aloci dinamic un vector de marime n, unde n este dat de la tastatura ? 

 

Anyway, ar trebui ca asta sa-si faca o idee chiar daca pe chat a supt-o si a vrut mura-n gura :) 

 

 

@MrGrj: Cred ca esti confuz; in exemplul acela al lui @3t3r4n parametrul size din functia minim nu are ca scop decat comunicarea dimensiunii vectorului pasat ca adresa in variabila vector (care este un pointer int). Nu se aloca nimic. Vectorul e alocat in main ca variabila a[10].

Si ca sa determini minimul este necesar sa iterezi peste toate valorile vectorului, si pentru asta ai nevoie de dimensiunea vectorului altfel cum stii cand iesi din zona de memorie dedicata acestuia?

Singura situatie in care nu este neaparata transmiterea dimensiunii vectorului este la string-urile null terminated, unde iterezi pana gasesti caracterul null. Dar in rest, 0 este o valoare valida.

In cazul in care te gandeai sa determini marimea unui array cu tehnica

int somesizefn(int *v)
{
  return sizeof(v)/sizeof(*v);
}

int main(int argc, char* argv[])
{
  int a[0xbf];
  int q = somesizefn(a);
  return 0;
}

nu cred ca ar fi mers.

Cum am spus mai sus, mai era varianta container-ului vector, caz in care daca tot folosesti C++ functia ar fi putut aratat asa:

// varianta cu index
template <typename _T> _T minim(std::vector<_T>& v)
{
  _T min = v[0];
  for(std::vector<_T>::size_type idx = 1; idx < v.size(); ++idx)
    if(v[idx] < min)	// aici te rogi ca _T sa aiba implementat operatorul "<"
      min = v[idx];
  return min;
}

// varianta cu iteratori
template <typename _T> _T minim(std::vector<_T>& v)
{
  std::vector<_T>::const_iterator it = v.cbegin();
  _T min = *it;
  for(it = v.cbegin() + 1; it != v.cend(); ++it)
    if(*it < min)
      min = *it;
  return min;
}

Sau folosesti direct

*std::min_element(std::begin(a), std::end(a));

Dar avand in vedere ca este o tema de liceu, zic ca era cam mult de procesat.

 

 

 

Imi cer scuze fata de cei pe care i-am deranjat inutil mentionandu-i cu @; m-a cam luat valul.

Edited by u0m3
Link to comment
Share on other sites

On 09.02.2017 at 10:35 PM, MrGrj said:

 

1. Asta e C, nu C++.

2. Functia nu ar trebui sa primeasca size ca argument - daca am un vector care contine n elemente unde n e un numar foarte mare, ce fac ? Ma apuc si numar elementele de nebun ca sa stiu cat sa aloc pentru argument? Nu mai bine aloci dinamic un vector de marime n, unde n este dat de la tastatura ? 

 

Anyway, ar trebui ca asta sa-si faca o idee chiar daca pe chat a supt-o si a vrut mura-n gura :) 

 

 

Calm te rog, eu i-am dat un mic exemplu pentru ca daca a cerut ajutorul clar nu stie prea multe.

 

int *a=new int[8];
int size=sizeof(a)/sizeof(*a);

Ce valoare va contine size? 8? nope .. 1 ;)

Am folosit ca parametru size pentru ca oricum trebuia sa aloce dinamic vectorul.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...