xLevel Posted February 9, 2017 Report Posted February 9, 2017 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! Quote
theandruala Posted February 9, 2017 Report Posted February 9, 2017 Nu merita. Singura lui caracteristica: da teapa pt o punga de seminte. Quote
3t3r4n Posted February 9, 2017 Report Posted February 9, 2017 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; } Quote
Active Members MrGrj Posted February 9, 2017 Active Members Report Posted February 9, 2017 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 Quote
Byte-ul Posted February 9, 2017 Report Posted February 9, 2017 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? Quote
Active Members MrGrj Posted February 9, 2017 Active Members Report Posted February 9, 2017 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. Quote
Byte-ul Posted February 9, 2017 Report Posted February 9, 2017 Just now, MrGrj said: 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. Da, nu se poate. Cum stii cand ai ajuns la ultimul element al vectorului? Quote
Active Members MrGrj Posted February 9, 2017 Active Members Report Posted February 9, 2017 Ti-e greu sa definesti size in functie ? Quote
Byte-ul Posted February 9, 2017 Report Posted February 9, 2017 5 minutes ago, MrGrj said: Ti-e greu sa definesti size in functie ? Cum sa ai un array ca argument al unei functii si sa-i definesti marimea in ea, wtf? Quote
unrec Posted February 9, 2017 Report Posted February 9, 2017 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'; } Quote
u0m3 Posted February 10, 2017 Report Posted February 10, 2017 (edited) @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 February 10, 2017 by u0m3 Quote
3t3r4n Posted February 10, 2017 Report Posted February 10, 2017 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. Quote