MrLevie Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 ya arkadaşlar c++ da vector kullanarak bir array oluşturduk diyelim. atıyorum 100000 birimli bir vector. bu kadar vectore nasıl değer verebilirim? for döngüsüyle olacak da bir türlü oturtamadım fikri. yani vector N(100000); gibi bir tanımla N'in her bir öğesine arka arkaya olmak üzere sayı vermem gerek. N[0]=0 N[1]=1 . . . N[99999]=99999 gibi. sonra shuffle fonksiyonuyla bunların sırasını karıştırıp, sonra kendi yaptığım sort fonksiyonuyla sıraya dizilebilmesi lazım.
Mirage Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 Örnek: vector<int> veryBigVectorForMrLevie; const int veryBigSize = 100000; for (int i = 0; i < veryBigSize; i++) { veryBigVectorForMrLevie.push_back(i); } ilk önce boş bir vector oluşturup, push_back ile vektörün sonuna eleman ekliyorsun. İstediğin elemana ulaşmak için veryBigVectorForMrLevie.at(index) kullanabilirsin. Şunlara da bir göz at detaylı bilgi için: http://www.cppreference.com/cppvector/index.html http://www.cplusplus.com/reference/stl/vector/vector.html
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 Mirage said: Örnek: vector<int> veryBigVectorForMrLevie; const int veryBigSize = 100000; for (int i = 0; i < veryBigSize; i++) { veryBigVectorForMrLevie.push_back(i); } ilk önce boş bir vector oluşturup, push_back ile vektörün sonuna eleman ekliyorsun. İstediğin elemana ulaşmak için veryBigVectorForMrLevie.at(index) kullanabilirsin. Şunlara da bir göz at detaylı bilgi için: http://www.cppreference.com/cppvector/index.html http://www.cplusplus.com/reference/stl/vector/vector.html sağolasın uğraşmışsın da bu benim bilmemkaçıncı öğeme bilmemkaç değerini veriyor mu? ben bulamadım:(
Mirage Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 Vektörü yukardaki şekilde oluşturduğunda içi boş. for döngüsünde i 0 başlıyor. push_back ile ilk elemanı koyduğunda vektörün 0. index'ine 0 değeri veriyorsun. bir sonraki iterasyonda 1. index'ine 1 değerini veriyorsun. Öyle gidiyor. Edit: İlla array kullanır gibi yapmak istiyorsan boş vektör yaratmak yerine veryBigSize elemanlı bir vektör yaratıp şöyle bir döngü ile de doldurabilirsin: for (int i = 0; i < veryBigSize; i++) { veryBigVectorForMrLevie[i] = i; }
Volfied Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 std::vector oldugunu tahmin ediyorum evet verir. eger random_shuffle yapmak istiyosan using std::vector; using std::random_shuffle; std::vector<int> mVector; int bigNum(10000); for (int i = 0; i < bigNum; i++) { mVector.push_back(i); } //buraya kadar ustteki kodla ayni std::random_shuffle(mVector.begin(), mVector.end()); .begin ve .end() fonksiyonlari iterator dondurur basina ve sonuna, random shuffle in O(n) olmasi lazim/ Eger kendin sort u yazacaksan iterator kabul etsin, boylece tum vector u variable olarak gecirip stackini sisirmezsin. Iteratorler integer olarak degerlendirilebilir (yani vector::iterator it = mVector.begin(); varsa, bu it++ dedigin zaman bi sonraki element e gecer vectorde) std::vector random_access iterator kullandigi icin yapacagin tum access islemleri O(1) olacak. Rahat rahat index kullanip da cagirabilirsin bir seyler.
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 hmm anladım sağolasınız:)
Volfied Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 bu sayfaya bak (bu siteye) http://www.sgi.com/tech/stl/Vector.html ve bulabilirsen su kitabi al: STL Tutorial and Reference Guide, Second Edition - Addison Wesley, Musser, Derge, Saini cok guzel anlatiyo tum STL dizaynini ve secim sebeplerini (Stepanov un yazdigi foreword u de kesin olarak oku :))
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 tamam bakayım:) yahu anladım anlamasına da kodlar birbirine girdi deliricem. allahtan 3 gün daha var. şimdi bakın benden istenen olay şu; integer vector yarat N olarak vectorün içermesini istediğin max sayı ata. vectorü 0 dan N e kadar sayılarla doldur vectorü shuffle kullanarak sırasını karıştır sonra artan sırayla saymasını sağla (ascending selection sort algorithm)[fonksiyonu kullanamıoz kendimiz yazıcaz] şimdi sizin yardımlarınızla da şöyle karmakarışık bir kod yazdım ama neyi düzeltmem lazım hiç bi fikrim yok:( Yazdığım kod #include <cstdlib> #include <iostream> #include <vector> using namespace std; int main(void) { vector<int> N(100000); int maxsize,b,a,min; maxsize=N.size(); for (int i = 0; i < maxsize; i++) { N[i] = i; } random_shuffle(N.begin(), N.end()); // buradan aşağısı vikipedianın pseudocodeundan alıp yazdığım ascending selection sort(yanlış da olaiblir) for(a=0; a<maxsize-2; a++) { min=a; for(b=a+1; b<maxsize-1;b++) { if(N[b]<N[min]) {min=b;} swap(N[a],N[min]); } } system("PAUSE"); return EXIT_SUCCESS; } Mirage: Kodu biçimlendirilmiş yazıya çevirdim. Okunmuyor öbür türlü.
fede Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 affınıza sığınarak vektör dondurma okuyorum hep.
Volfied Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 [code] tagini kullanarak formatting i override edebilirsin. Kodunu test ediyorum birazdan soylerim sorununu
Mirage Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 Valla C++ tecrübem pek yok, detaylı da bakamadım ama bana doğru gözüktü. Karmakarışık olmasının sebebi her şeyin tek fonksiyon içinde bulunması. Şu iki kısım için iki ayrı fonksiyon tanımla: for (int i = 0; i < maxsize; i++) { N[i] = i; } [hr] for(a=0; a<maxsize-2; a++) { min=a; for(b=a+1; b<maxsize-1;b++) { if(N[b]<N[min]) {min=b;} swap(N[a],N[min]); } } Sonuç olarak ana kod aşağı yukarı şöyle gözükecek yani: vector<int> N(100000); initialize(N); // burda dolduruyorsun random_shuffle(N.begin(), N.end()); // burda karıştırıyorsun sort_ascending(N); // burda sıralıyorsun
Volfied Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 wiki yi yanlis okumussun ilk basta :) swap ilk for loop un icinde olacak, ikincinin degil. Hala calismadi gerci, zamanim olsa yapardim, ama bir kac yerden daha arastirip calisacagina emin oldugun (kendin oturup kanitlarsan calistigini anlamana yardimci olur) bi algoritma kullanman yararina olur.
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 bir de orada sort kısmını cout fonksiyonuyla nasıl kullanacağım onu beceremedim. yani ekrana basması için sırayla. @volfied: yanlış okumuş olcağımın farkındayım:) tek hata o mu peki?
Volfied Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 neden max_size -2 ve max_size -1 kullandin? ikinci sorunun orda :)
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 bilmiyorum wikide öyle yazıyodu:)
Volfied Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 yanlis wikiye bakmissin, benim baktigimda oyle yazmiyodu swap i ve maxsize olaylarini duzeltirsen sorunun duzelir eger ciddi ciddi CS okumak istiyorsan, bu tur sort algoritmalarini kagit kalemle yazip cizip anlarsan sana inanilmaz derecede yardimlari olur ilerde.
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 aslında ben geçen dönem CS almıştım (BB'yle de verdim hehe) ama gel gör ki pseudocode okuyamıyorum rezilllik:D
Volfied Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 major un CS degil dimi? bunlarin turkce terimlerini ogrenmem lazim benim konusamiyorum Turkiyedeki ogrencilerle :/
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 hocanın verdiği linkteki pseudocode şöyle; for i ← 0 to n-2 do min ← i for j ← (i + 1) to n-1 do if A[j] < A[min] min ← j swap A[i] and A[min]
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 Volfied said: major un CS degil dimi? bunlarin turkce terimlerini ogrenmem lazim benim konusamiyorum Turkiyedeki ogrencilerle :/ aslında ben sistem mühendisliği okuyorum. içinde c ve C++ ve java da veriyorlar haliyle anadal demeye çalıştın heralde?
Volfied Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 hocanin verdigi linki de verebilir misin? :) sicmis biraz indent lere dikkat tabi, swap for loop un disinda oldugunu goreceksin orda :)
Volfied Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 ve evet, ana dal yan dal, unutuyorum surekli ingilizce konusunca :(
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 http://en.wikipedia.org/wiki/Selection_sort
MrLevie Mesaj tarihi: Temmuz 8, 2008 Konuyu açan Mesaj tarihi: Temmuz 8, 2008 ben bunun coutunu nasıl yapacağım peki? denemiyorum bile oy üzdenç
nameless Mesaj tarihi: Temmuz 8, 2008 Mesaj tarihi: Temmuz 8, 2008 #include <cstdlib> #include <iostream> #include <vector> #include <algorithm> #include <conio.h> using namespace std; int main() { vector<int> N(10); int maxsize,b,a,min; maxsize=N.size(); for (int i = 0; i < maxsize; i++) { N[i] = i; cout << N[i] << endl; } cout << "Vektor dolduruldu" << endl; random_shuffle(N.begin(), N.end()); for(a=0; a<maxsize; a++) { min=a; for(b=a+1; b<maxsize;b++) { if(N[b]<N[min]) { min=b; } } swap(N[a],N[min]); } for(int j=0; j<maxsize; j++) { cout << N[j] << endl; } getch(); return 0; } edit:// sorting olayı çalışır halde
Öne çıkan mesajlar