MrLevie Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 c++ sorularım aynı hızla devam ediyor:P şimdi arkadaşlar elimde iki ayrı dosya var. bu iki ayrı dosyada hersatırda farklı olmak üzere kelimeler var. ve bu kelimelerden bazıları her iki dosyada farklıyerlerde var. benim bu kelimeleri bulup (iki dosyada da bulunan) bir deque'in içine doldurup ekrana bu deque i bastırmam gerek. ne yazık ki ilerlemem iki dosyanın çıktılarını almaktan öteye gidemedi:) şekil a; #include <fstream> #include <string> #include <iostream> using namespace std; int main(void) { fstream file("test1.txt"); string s; file>> s; while(!file.eof()) { //cout<<s<<endl; file>>s; } fstream file2("test2.txt"); string k; file2>> k; while(!file2.eof()) { //cout<<k<<endl; file2>>k; } file2.close(); file.close(); system("PAUSE"); return 0; }
dasaaa Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 MrLevie said: c++ sorularım aynı hızla devam ediyor:P şimdi arkadaşlar elimde iki ayrı dosya var. bu iki ayrı dosyada hersatırda farklı olmak üzere kelimeler var. ve bu kelimelerden bazıları her iki dosyada farklıyerlerde var. benim bu kelimeleri bulup (iki dosyada da bulunan) bir deque'in içine doldurup ekrana bu deque i bastırmam gerek. ne yazık ki ilerlemem iki dosyanın çıktılarını almaktan öteye gidemedi:) şekil a; #include <fstream> #include <string> #include <iostream> using namespace std; int main(void) { fstream file("test1.txt"); string s; file>> s; while(!file.eof()) { //cout<<s<<endl; file>>s; } fstream file2("test2.txt"); string k; file2>> k; while(!file2.eof()) { //cout<<k<<endl; file2>>k; } file2.close(); file.close(); system("PAUSE"); return 0; } anlamam hiç. sadece gülen suratların çıkmasını sevmedim
MrLevie Mesaj tarihi: Ağustos 13, 2008 Konuyu açan Mesaj tarihi: Ağustos 13, 2008 ben de dedim aha bu adam ilah galiba anında çözdü:P
Scheriff Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 tam anlamadım ama bi dosyadaki kelimeleri tree veya hash table'da kaydedip sonra diğer dosyadaki kelimeleri tek tek o datayla karşılaştırabilirsin ne kdr büyük dosyalar bunlar kaç kelime var her birinde
oper Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 C++ pek anlamam ama yapman gereken dosyalardan birinden sırayla kelimeleri alacaksın. aldığın her kelimeyi diğer dosyada baştan aşağı karşılaştıracaksın. aynıysa yazdıracaksın. söylemesi kolay yazması zor tabi kod olarak :D
dasaaa Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 MrLevie said: ben de dedim aha bu adam ilah galiba anında çözdü:P keşke mr levie... keşke amerikan filmi standartları ile okuyun. arada bi sn duraklayım sonra ikinci keşkeyi söyleyin. tabii bu esnada yüzlerde sıkıntılı bir ifade var. bi kere daha uplayalım da cevap gelir belki. en azından öyle faydam dokunsun
MrLevie Mesaj tarihi: Ağustos 13, 2008 Konuyu açan Mesaj tarihi: Ağustos 13, 2008 @scheriff her birinde 3500 küsur kelime var. @oper onu ben de düşündüm de, koda düşürmeye gelince kasıyor hocam be:) @dasaaa canın baya sıkılıyor heralde:)
di Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 dosya iceriklerini n 'e gore parcalayip iki ayri diziye atip sonra karsilastirma/arama fonksiyonlari ile eslestirme yapabilirsin. su deque dediginin ne oldugunu anlamadim. anladigimi yaziyorum anca =)
Scheriff Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 dediğim gibi yapabilirsin class fln yazman gerekir ilk dosyayı alır okursun baştan sonra koyarsın kelimeleri sonra da diğer dosyadan her kelime için o yapıda arama yaparsın n^2 time olur tabi ama yapcak bişi yok:D
Mirage Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 di, deque = double ended queue Scheriff'in dediği iyi bir çözüm. Kelime karşılaştırmalarını kolayca yapabileceğin bir veri yapısı oluştur. B-Tree çok iyidir mesela. Nerdeyse tüm veritabanlarının alt katmanlarında B-Tree ve varyasyonları kullanılır. Hashtable da iyidir ama her string unique eşleştirilmediği için yanlış sonuçlara karşı önlem alman lazım. STL içinde vardır bu tip şeyler. Sonra dosyanın birini satır satır oku. Her satırı bu veri yapısına ekle. İkinci dosyayı okumaya başla. Okuduğun her satırın bu veri yapısında olup olmadığına bak. Eğer string ve B-Tree/Hashtable kullanıyorsan performansı kafana takman gerekmez. On binlerce veri içeren bir yapı içinde bile en fazla bir kaç denemede bulur olup olmadığını.
MrLevie Mesaj tarihi: Ağustos 13, 2008 Konuyu açan Mesaj tarihi: Ağustos 13, 2008 hashtable ve Btree nin ne olduğunu bilmiyorum:) ikincisi zaten düşüncem önce birinciyi okuyup sonra ikincidekiyle karşılaştırmak zaten de; while loopun neresine sokacağıma karar veremedim. while loopu darmağın etti
Scheriff Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 veri yapısı kullanmadan yapcam diyorsun kolay gelsin diyorum:) ek:aslında iç içe 2 while çözer snrm sorunu ilk while'da 1. dosyadan bi kelimeyi alcan 2. while'da o kelimeyi 2. dosyanın tamamıyla karşılaştırcan varsa aynısı alcan işte yoksa ilk while yeni bi kelime alcak falan filan
Mirage Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 Veri yapısı kullanmadan yapmaya kalkarsan kompleksite karesel artar. Ama yapması zor değil. Bubblesort ile aynı mantık: foreach line A in file 1 { // İlk dosyadaki her satır için ikinci dosyadaki // her satırı tek tek kontrol etceksin. foreach line B in file 2 { if (A equals B) add A to deque break; } } Edit: Güneş gözlüklü amcayı sildim.
MrLevie Mesaj tarihi: Ağustos 13, 2008 Konuyu açan Mesaj tarihi: Ağustos 13, 2008 yahu öküzün anlıcağı türden anlatın arkadaşlar:) veri yapısı falan nedir:) günlerdir sadece kod yazıyoruz tanım falan bilmiyorum
Scheriff Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 boşver veri yapısı (data structure) fln gerek yok hiç duymadıysan daha önce while looplarıyla halledersin mirage ve bnm postları okuyup anlayıp
MrLevie Mesaj tarihi: Ağustos 13, 2008 Konuyu açan Mesaj tarihi: Ağustos 13, 2008 fstream file("test1.txt"); fstream file2("test2.txt"); string s; file>> s; string k; file2>> k; while(!file.eof()) { file>>s; while(!file2.eof()) { file2>>k; if(k==s) { cout<<k<<endl; break; } } } bunu yazdım fakat sadece tek kelime ve çok ilginç atıyorum ilk dosyanın ilk üç kelimesi; aaa bbb ccc ikinici dosyanın kelimeleri; ttt xxx bbb fff aaa olsun; çıktı olarak bbb geliyor. aaa yı atlıyor.omg?
Mirage Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 Veri yapısı içinde veri barındıran bir yapı desem daha beter kızacaksın. Ama öyle yahu. Verilerin için bir konteyner. En basitinden array bir veri yapısıdır mesela. Deque bir veri yapısıdır. Liste, Tablo, Ağaç vb şeyler veri yapısıdır. Verileri düzenli olarak saklamak, aramak, sıralamak, karşılaştırmak ve benzeri işler için kullanılır. Bence sen şimdi yapmakta olduğun programa biraz ara verip bu tür temel şeyleri oku. Yürümeyi öğrenmeden koşmaya çalışıyorsun.
MrLevie Mesaj tarihi: Ağustos 13, 2008 Konuyu açan Mesaj tarihi: Ağustos 13, 2008 haa vector falan kullanmayı biliyorum evet. valla zaman olsa neden olmasın diyeceğim de yarına yetişmesi gerek:) edit: durun bakalım vectore yerleştirip vectorleri karşılaştırmayı deniyim eniyisi.
Scheriff Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 aaa yi atlıyo çunku sen daha while looplara girmeden ilk kelimeleri alıyorsun ve onları karşılaştırmadan while loopun içinde 2. kelimeleri alıyorsun kısaca while ın dışındaki file>>k ve s i sil
MrLevie Mesaj tarihi: Ağustos 13, 2008 Konuyu açan Mesaj tarihi: Ağustos 13, 2008 a hakkaten ya bir de niye bu tek çıktı veriyor? bir tek bbb yazıp bırakıyor daha basması gereken şeyler var. break i silsem de yine tek basıyor.
Scheriff Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 şöle ki sen 2. while loopta kontrol ettikten sonra o dosyayı sıfırlaman lazım. imleç son bıraktığı yerde kalıyor. ilk while loopta 2. kelimeyi alıp içteki while loopa geldiği zaman bir önceki kaldığı yerden devam ediyor. bi fonksiyon vardı bu imleci başa getirme işleminin hatırlamıorum bulursam yazarım break le alakası yok hatanın onu yaz tekrar boşuna kontrol etmesin bütün dosyayı ek:buldum seekg kullanımı için seekg 0 pozisyonuna getirirsen olucak snrm
MrLevie Mesaj tarihi: Ağustos 13, 2008 Konuyu açan Mesaj tarihi: Ağustos 13, 2008 ben onu for loopa çevirip sıfırlatsam for değerini?
Scheriff Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 neyi for loopa çevircen? bahsettiğim şey get pointerın değeri file2>>k satırında yaptığın işlemde kullanılan bir parametre onu sıfırlaman lazım seekg(0) kullan olcak fazla kurcalamaya gerek yok breakle cout arasında yaz seekg yi
MrLevie Mesaj tarihi: Ağustos 13, 2008 Konuyu açan Mesaj tarihi: Ağustos 13, 2008 of kafayı yiyecem kendi kafamı yerken size de kafayı yedirecem:) while(!file.eof()) { file>>s; while(!file2.eof()) { file2>>k; if(k==s) { cout<<k<<endl; file2.seekg(0); break; } } } bu halde sadece 2 tane çıktı veriyor. edit: gereksiz bi kod kalmış kenarda
Scheriff Mesaj tarihi: Ağustos 13, 2008 Mesaj tarihi: Ağustos 13, 2008 abicim ztn 2 tane ortak kelimen var kaç tane çıktı versin?
Öne çıkan mesajlar