•EmanuelAchirei
Strain
Karma: 2
Deconectat
Mesaje: 10
|
|
« : Februarie 12, 2012, 22:58:41 » |
|
As dori sa pun ca parametru pentru o functie un vector cu dimensiunea citita de la tastatura. Am incercat asa: int chestie ( int j, int a[j]) {int i; for(i=0;i<j;i++) cout<<a[i]+1; }
int main() { int v[]={1,2,3,4,5,6,7,8,9,10},n; n=10;chestie(n,v); } Insa Desktop\prelucrare_vectori\cautari\vector\main.cpp|4|error: array bound is not an integer constant| Desktop\prelucrare_vectori\cautari\vector\main.cpp||In function 'int chestie(...)' Desktop\prelucrare_vectori\cautari\vector\main.cpp|6|error: 'j' was not declared in this scope| Desktop\prelucrare_vectori\cautari\vector\main.cpp|7|error: 'a' was not declared in this scope| Desktop\prelucrare_vectori\cautari\vector\main.cpp|8|warning: no return statement in function returning non-void| ||=== Build finished: 3 errors, 1 warnings ===|
|
|
|
Memorat
|
|
|
|
•dushmi
|
|
« Răspunde #1 : Februarie 12, 2012, 23:05:38 » |
|
Chestia e ca nu poti folosi un parametru pentru a "declara" un alt parametru. Codul ar trb sa fie cam asa int chestie ( int j, int a[])
sau int chestie ( int j, int *a)
|
|
|
Memorat
|
|
|
|
•EmanuelAchirei
Strain
Karma: 2
Deconectat
Mesaje: 10
|
|
« Răspunde #2 : Februarie 13, 2012, 00:16:59 » |
|
Vectorul din functie va avea aceeasi dimensiune cu cel original? Este mai eficient sa folosesc functia qsort din stdlib.h decat sa o creez eu insumi?
|
|
|
Memorat
|
|
|
|
•maritim
|
|
« Răspunde #3 : Februarie 13, 2012, 07:41:11 » |
|
La prima intrebare da. La a doua intrebare da, functia qsort e mai rapida decat ce ai implementa tu, dar ar fi bine sa incerci sa inveti sort din STL care este mai rapida decat qsort si mai usor de folosit. Functia sort ar trebui sa arate cam asa: #include<algorithm> using namespace std;
...............................
inline int cmp(int a,int b) { return a < b; //Aici poate fi orice conditie }
int main() { ............................. sort(chestie+1,chestie+(numarul de elemente)+1,cmp); //inceputul si sfarsitul secventei din vector pe care o sortezi return 0; }
Si iti sorteaza elementele dupa cum doresti tu.
|
|
« Ultima modificare: Februarie 13, 2012, 08:01:00 de către Lambru Andrei Cristian »
|
Memorat
|
|
|
|
•EmanuelAchirei
Strain
Karma: 2
Deconectat
Mesaje: 10
|
|
« Răspunde #4 : Februarie 13, 2012, 08:54:58 » |
|
Chestie reprezinta limiele vectorului? Ce inseamna inline din fata declararii functiei de comparare? Am nevoie de o anumita librarie pt functia sort?
|
|
« Ultima modificare: Februarie 13, 2012, 09:08:35 de către Achirei Emanuel »
|
Memorat
|
|
|
|
•maritim
|
|
« Răspunde #5 : Februarie 13, 2012, 09:35:16 » |
|
Ok, s-o luam pe rand : #1 Chestie reprezinta limiele vectorului? Nu, chestie reprezinta numele vectorului. Chestie defapt nu e un vector in sine, e un pointer (google it daca nu cunosti termenul) spre pozitia de inceput al vectorului. Deci chestie+1 inseamna pozitia a doua a vectorului ( vectorii sunt indexati de la 0 deci pozitia cu numarul 1 din vector ), iar chestie+1+(numarul de elemente) reprezinta chiar pozitia egala cu numarul de elemente din vecctor. #2 Ce inseamna inline din fata declararii functiei de comparare? inline este o instructiune ce face ca functia sa fie putin mai rapida atunci cand este apelata de un numar mai mare de ori. #3 Am nevoie de o anumita librarie pt functia sort? Da : #include<algorithm> using namespace std;
|
|
« Ultima modificare: Februarie 13, 2012, 09:45:42 de către Lambru Andrei Cristian »
|
Memorat
|
|
|
|
•EmanuelAchirei
Strain
Karma: 2
Deconectat
Mesaje: 10
|
|
« Răspunde #6 : Februarie 13, 2012, 15:28:59 » |
|
Creste eficienta daca folosesc pointeri, sau e doar un mod mai elegant de a scrie?
|
|
|
Memorat
|
|
|
|
•PlayLikeNeverB4
|
|
« Răspunde #7 : Februarie 13, 2012, 16:44:46 » |
|
Tu trebuie sa transmiti adresele limitelor vectorului, lucru pe care il faci cu pointeri. chestie+1 e echivalent cu &chestie[1] (adresa elementului 1, adica al doilea). Deci nu tine de eleganta sau de eficienta, pur si simplu asta trebuie sa transmiti functiei.
|
|
|
Memorat
|
|
|
|
•EmanuelAchirei
Strain
Karma: 2
Deconectat
Mesaje: 10
|
|
« Răspunde #8 : Februarie 13, 2012, 20:34:08 » |
|
Puteti sa imi explicati cu ce am gresit? L.E.: am rezolvat. se pare ca problema era la "chestie+1". #include <iostream> #include <algorithm>
using namespace std; inline int cmp(int a,int b) { return a < b; //Aici poate fi orice conditie } int main() { int v[]={3,2,5,9,6,1,7,0,4}; sort(v,v+9,cmp); for(int i=0;i<9;i++) cout<<v[i]<<endl;
}
Asa merge.
|
|
« Ultima modificare: Februarie 13, 2012, 20:40:28 de către Achirei Emanuel »
|
Memorat
|
|
|
|
•CezarMocan
|
|
« Răspunde #9 : Februarie 13, 2012, 20:40:21 » |
|
Apeleaza sort(v, v + 9, cmp), deoarece sirul tau este indexat de la 0 si nu de la 1.
|
|
|
Memorat
|
|
|
|
•maritim
|
|
« Răspunde #10 : Februarie 14, 2012, 09:23:27 » |
|
Daca vrei ca sirul tau sa fie indexat de la 1 initializeaza-l asa: int v[] = {0,3,2,5,9,6,1,7,0,4,8} Acum vectorul tau va avea o pozitie goala pe pozitia 0 si numerele din sir incep practic cu pozitia 1.
|
|
|
Memorat
|
|
|
|
•EmanuelAchirei
Strain
Karma: 2
Deconectat
Mesaje: 10
|
|
« Răspunde #11 : Februarie 15, 2012, 21:28:04 » |
|
In ce cazuri este mai bine sa folosesc alocare dinamica si cand statica? M-ar interesa in principal pentru problemele de la olimpiada. Ceva tips & tricks pentru problemele de la concursuri?
|
|
|
Memorat
|
|
|
|
|