Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

bir c++ problemi [yardım lazım az]


Sly-One

Öne çıkan mesajlar

evet, kafayı yiyip birilerini pataklamadan buraya yazayım belki çözer problemi birisi dedim. öncelikle amacı söyliyim, amaç std inputtan girilen (yada .txt ten alınan) sayıları, verilen bir operatöre göre dizip cout etmek.

format şöyle olacak mesela .txt de :
noop 4 34 57 21 54

önce komutu alıp, sonra integerları bir vektöre dizip vektörü komuta göre okutuyorum. 3 komut var, noop : etkisiz, sort : sort edilecek (problem burda), invert : tersten cout.

herşey güzel iyi hoş, sort etmesi gereken fonksiyonlar çalışmıyor, sayılar noop komutu gibi dışarı çıkıyor. biri problemin hangi noktada olduğunu çözüp bu gece 12 ye kadar ödevi kafayı yemeden yollamama yardım ederse sevinirim. programda hata yok,çalışıyor ama sort fonksiyonun logicinde birşey var sanırım. buyrun ;
[spo]#include
#include
#include
using namespace std;

void invert(vector v) {
int i=v.size()-1;
while(i > -1) {
cout << v[*i] << " ";
i--;
}
}
void insert(vector v, int size, int value) {
int i = size - 1;
while (i >= 0 && v[*i] > value) {
v[i + 1] = v[*i];
i--;
}
v[i + 1] = value;
}

void insertionsort(vector v, int size) {
for (int i = 0; i < size; i = i + 1) insert(v, i, v[*i]);
}

void printvector(vector v) {
for(int i=0 ; i< v.size(); i++)
cout << v[*i] << " ";
cout << endl;
}

int main()
{
string op;
int a;
vector v;
cin >> op;
while(cin >> a && !cin.eof()) {
v.push_back(a);
}

if(op == "sort")
{
insertionsort(v, v.size());
printvector(v);
}
else
{
if( op == "noop")
printvector(v);
else
{
if(op == "invert") {
invert(v);
cout << endl; }
else
cout << "Unknown operation." << endl;
}
}
system("PAUSE");
return 0;
}[/spo]
aslında bir problem daha war, cin >> a komutunun altına
if (cin.fail()) kullanıp cout << "integer girin pls"; return 1; demem lazım ama bunu ekleyip integer yerine başka birşey girsem de sadece oraya kadar gelip kesiyor, hata mesajını vermiyor. hadi patiler, aslansınız kaplansınız biliyorum. penth denen fasulye çok yardım etti saolsun da bu noktayı aşamadık zaman yetmedi falan ben de dayanamıyorum artık cuma cuma. biri yardım ederse repe boğacağım kendisini.

edit = parantez içindeki i ler yıldızsız normalde.

[ Mesaj 27 Nisan 2007, Cuma - 21:28 tarihinde, Sly-One tarafından güncellenmiştir ]
Link to comment
Sosyal ağlarda paylaş

while(cin >> a && !cin.eof()) { //hangi a hoca? değer nerde
edit: tekrar baktım.. while condition içinde input almaya mı calısıyosun sen?
insertionsort a bakıyorum i = 0 dan alıyor inserte yolluyor ..while i>0 gerekiyor insertte fakat başladığın değer -1 ve es geçildi.

gözüme çarpan bu

[ Mesaj 27 Nisan 2007, Cuma - 23:00 tarihinde, LethE tarafından güncellenmiştir ]
Link to comment
Sosyal ağlarda paylaş

2 satır yukarsında belirttiğim int a.
while döngüsüne gelince ben de ilk o yanılgıya düştüm, ancak ilk i=0 ile döngüye girmiyor ama, v[0]=value atamasını gerçekleştiriyor yine de (yani v[0] ın değeri sabit kalıyor ilk döngüde). sorun orda değil.

ek : evet while ile integerları tek tek a ya atayıp ordan vektöre alıyorum. program sorunsuz, tek sorun sort fonksiyonlarında oralara dikkat : / ben çözemedim hatayı walla.
problem sort komutu ile bir değişiklik yapmıyor vektörü direk cout a veriyor olması.

[ Mesaj 27 Nisan 2007, Cuma - 23:03 tarihinde, Sly-One tarafından güncellenmiştir ]
Link to comment
Sosyal ağlarda paylaş

Algoritmada sorun yok gibi gözüküyor. C++ bilgim pek iyi değil. C++'da hiç vektor kullanmadım. Vektörü parametre olarak girdiğinde call by reference olarak değil de, call by value olarak çalışıyorsa sorun ordadır. Yaptığın değişiklikler fonksiyon içinde lokal bir kopyada yapılır, fonksiyon bitince kaybolur gider.

Eğer öyleyse void döndürmek yerine değiştirdiğin vektörü döndürebilirsin yada pointer kullanarak call by reference yaparsın.

[ Mesaj 27 Nisan 2007, Cuma - 23:25 tarihinde, Mirage tarafından güncellenmiştir ]
Link to comment
Sosyal ağlarda paylaş

Şöyle dene bir de. Eğer sorun dediğim gibi call by value yapmandan kaynaklanıyosa bu şekilde çözülür. Ama dediğim gibi C++ ile aram pek iyi değil. Ve en ufak test etme şansım olmadan onlarca pointer değişiklikiği yapınca kesin bir şeyleri yamultmuşumdur. Kendin düzeltcen artık yanlışları.

[spo]#include
#include
#include
using namespace std;

void invert(vector v) {
int i=v.size()-1;
while(i > -1) {
cout << v[*i] << " ";
i--;
}
}
void insert(vector *v, int size, int value) {
int i = size - 1;
while (i >= 0 && *v[*i] > value) {
*v[i + 1] = *v[*i];
i--;
}
*v[i + 1] = value;
}

void insertionsort(vector *v, int size) {
for (int i = 0; i < size; i = i + 1) insert(v, i, *v[*i]);
}

void printvector(vector v) {
for(int i=0 ; i< v.size(); i++)
cout << v[*i] << " ";
cout << endl;
}

int main()
{
string op;
int a;
vector *v;
cin >> op;
while(cin >> a && !cin.eof()) {
v->push_back(a);
}

if(op == "sort")
{
insertionsort(v, v->size());
printvector(*v);
}
else
{
if( op == "noop")
printvector(*v);
else
{
if(op == "invert") {
invert(*v);
cout << endl; }
else
cout << "Unknown operation." << endl;
}
}
system("PAUSE");
return 0;
}[/spo]
Link to comment
Sosyal ağlarda paylaş

tebrik ediyorum ve teşekkür ediyorum. ama ben buraya yazamadım, hatanın dediğin yerden kaynaklandığını penth 1500 saat sonra farkederek uyardı beni, void functionlarda vektörü vector v şeklinde değil de vector &v şeklinde call by reference ile tanıtınca problem çözüldü. kısacası ödevi yetiştirdim 12 den önce hehe. saolun.
Link to comment
Sosyal ağlarda paylaş

İyi bari. Olay array ve vector'ün parametre olarak gönderilme farkından kaynaklanıyor. Sanırsam algoritmayı sitenin birinden aşırmışsın, orda da vector yerine array kullanılmış. Çünkü bir fonksiyona array yolladığın zaman array'in başlangıç adresi yollanır. Yani otomatik olarak call be reference ile çağırılır. Eh, array'leri vector'le değiştirince böyle bir problem hortlamış.
Link to comment
Sosyal ağlarda paylaş

×
×
  • Yeni Oluştur...