Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Vector ca parametru cu dimensiune citita de la tastatura  (Citit de 9977 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
EmanuelAchirei
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« : 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:
Cod:
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(...)'Neutral
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
Nu mai tace
*****

Karma: 130
Deconectat Deconectat

Mesaje: 472



Vezi Profilul
« 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
Cod:
int chestie ( int j, int a[])
sau
Cod:
int chestie ( int j, int *a)
Memorat
EmanuelAchirei
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« 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
Vorbaret
****

Karma: 59
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« 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:

Cod:
#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 Deconectat

Mesaje: 10



Vezi Profilul
« 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
Vorbaret
****

Karma: 59
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« Răspunde #5 : Februarie 13, 2012, 09:35:16 »

Ok, s-o luam pe rand :

#1
Citat
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
Citat
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
Citat
Am nevoie de o anumita librarie pt functia sort?

Da :

Cod:
#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 Deconectat

Mesaje: 10



Vezi Profilul
« 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
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« 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 Deconectat

Mesaje: 10



Vezi Profilul
« 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".
Cod:
#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
Nu mai tace
*****

Karma: 252
Deconectat Deconectat

Mesaje: 567



Vezi Profilul
« 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
Vorbaret
****

Karma: 59
Deconectat Deconectat

Mesaje: 176



Vezi Profilul
« Răspunde #10 : Februarie 14, 2012, 09:23:27 »

Daca vrei ca sirul tau sa fie indexat de la 1 initializeaza-l asa:
Cod:
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 Deconectat

Mesaje: 10



Vezi Profilul
« 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
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines