C++ İle Dosya İçeriğini Değiştirme Şifreleme?

Kapalı Hesap (50160)
08-12-2010, 18:57   |  #1  
OP Kapalı Hesap
Teşekkür Sayısı: 0
61 mesaj
Kayıt Tarihi:Kayıt: Tem 2007

Merhaba arkadaşlar. Şifreleme ile ilgili bir ödevim var. c++'da yazmayı düşünüyorum. Yapılacak işlem basit ama pek kod bilgi olmadığı için elim kolum biraz bağlı.. Bir tablo olacak örneğin A=D, B=F şeklinde her karakterin değeri olacak. Programı açıp dosyayı seçeceğim ve program dosyadaki tüm karakterleri karşılıklarıyla çevirecek ve yeni bir şifrelenmiş dosya ortaya koyacak. Tabloyu ayrı olarak ben yazacağım siz sadece 5 karakterlik birşey bulsanız ya da kolay geliyorsa 2dk yazsanız yeterli benim için.. Şimdiden ÇOK TEŞEKKÜRLER :)

muh34
08-12-2010, 19:54   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Dosyanızda bulunan karakterlerin(ornegin A karakteri),karsılıgı yine bir alfanumerik karakter mi olacaktır(ornegin D) ? 5 karakterlik bir şey ile kastedilen nedir ? Sorunuzu biraz acarsanız daha iyi yardımcı olmaya calısırım.
Başarılar

Son Düzenleme: muh34 ~ 08 Aralık 2010 19:55
Kapalı Hesap (50160)
08-12-2010, 20:59   |  #3  
OP Kapalı Hesap
Teşekkür Sayısı: 0
61 mesaj
Kayıt Tarihi:Kayıt: Tem 2007

evet aynen öyle olacak. A="benim seçeceğim bir harf"; şeklide olacak. 5 karakterden bahsettiğim de bu seçenekleri ben 255 karakterin hepsi için tek tek ayrı olarak gireceğim. Siz 5 karakter yaparsanız ben devamını getiririm.

Aslında çok zor değil gibi. Program dosyayı içine alacak. Ona vereceğim eşitliklere göre harfleri değiştirip yeni dosya yaratacak.

ilgilendiğin için teşekkürler :)

muh34
08-12-2010, 21:20   |  #4  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

#include <iostream>
#include <fstream>

using namespace std;

main() {

       ifstream dosya("oku.txt");
       ofstream kayit("sifre.txt",ios::app);
       char kar;
       while(!dosya.eof())  {
       dosya >> kar;
       kar=toupper(kar);
       if(kar=='A')
       kar='B';
       else if(kar=='B')
       kar='C';
       else if(kar=='C')
       kar='D';
       else if(kar=='D')
       kar='F';
       if(!dosya.eof())
       kayit << kar;
       }
       return 0;
       }
Bahsettiginiz durumu yukarıdaki if() kosulları ile isteginize gore gerceklestirebilirsiniz.

Başarılar

Son Düzenleme: muh34 ~ 08 Aralık 2010 21:28
Kapalı Hesap (50160)
08-12-2010, 22:35   |  #5  
OP Kapalı Hesap
Teşekkür Sayısı: 0
61 mesaj
Kayıt Tarihi:Kayıt: Tem 2007

visual studio 2008'de çalıştırmayı denedim şu hatayı veriyor:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Kapalı Hesap (153535)
08-12-2010, 22:43   |  #6  
Kapalı Hesap
Teşekkür Sayısı: 27
2,297 mesaj
Kayıt Tarihi:Kayıt: Eki 2009

main kısmını int main() yapın.

muh34
08-12-2010, 22:48   |  #7  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Yukarıdaki yayımlamıs oldugum kod standart C++ dili ile yazılmıstır.Visual studio C++ veya borland C++ gibi dillerde bazı kutuphane dosyaları,standart C++'a gore farklı sekillerde tanımlanmıs olabiliyor veya bazı hatalara mahal verebiliyor.Yukarıdaki kod satırlarına #pragma onişlemcisini(preprocessor) ekleyerek programı derlemeyi deneyiniz.Eger derleyici(complier) hala programı derlemede sorun cıkarıyorsa,devC++ gibi bir editor uzerinde programı calıstırınız.

Başarılar

Kapalı Hesap (50160)
08-12-2010, 22:51   |  #8  
OP Kapalı Hesap
Teşekkür Sayısı: 0
61 mesaj
Kayıt Tarihi:Kayıt: Tem 2007

şimdi de sonsuz döngüye girdi.. ?

muh34
08-12-2010, 22:55   |  #9  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Program dogru bir sekilde calismaktadır.Ornegin oku adli metin dosyanıza abcd karakterlerini yazınız ve programı calıstırınız.Yeni olusacak sifre adlı metin dosyası icerisinde bcdf karakterleri yazmalıdır.

Son Düzenleme: muh34 ~ 08 Aralık 2010 22:55
Kapalı Hesap (153535)
08-12-2010, 22:58   |  #10  
Kapalı Hesap
Teşekkür Sayısı: 27
2,297 mesaj
Kayıt Tarihi:Kayıt: Eki 2009

Karakter girilemiyor bunu visual c++a uygun olarak çevirebilir misiniz?

Kapalı Hesap (50160)
08-12-2010, 23:00   |  #11  
OP Kapalı Hesap
Teşekkür Sayısı: 0
61 mesaj
Kayıt Tarihi:Kayıt: Tem 2007

dev c++'da çalıştı. oku.txt'ye ABC yazdım. çevirdi fakat 4 kere.. yani BCDBCDBCDBCD şeklinde yazıyor. while döngüsünün koşuluyla ilgili olabilir mi?

muh34
08-12-2010, 23:13   |  #12  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Programın icerisinde karakter girisi yoktur.Soruda sadece dosya icerisinden veri okunması istendigi icin,karakter girisini kodlamadım,ancak istediginiz uzere kodun yeni halini yayımlıyorum.

#pragma
#include <iostream>
#include <fstream>

using namespace std;

main() {

       ofstream dosya("oku.txt");

       char dizi[30];
       cout << "Kelimeleri giriniz:";
       cin.getline(dizi,30);

       dosya.write(dizi,strlen(dizi));
       dosya.close();

       ifstream dosya2("oku.txt");
       ofstream kayit("sifre.txt");
       char kar;
       while(!dosya2.eof())  {
       dosya2 >> kar;
       kar=toupper(kar);
       if(kar=='A')
       kar='B';
       else if(kar=='B')
       kar='C';
       else if(kar=='C')
       kar='D';
       else if(kar=='D')
       kar='F';
       if(!dosya2.eof())
       kayit << kar;
       }
       dosya2.close();
       kayit.close();
       return 0;
       }
Başarılar

muh34
08-12-2010, 23:19   |  #13  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Hayır,while() dongu kosulu dosya sonuna kadar ilgili metnin okunması icin kurgulanmıstır.Muhtemelen,siz bir kac defa programı calıstırdıgınız icin,her defasında dosyaya veri girisi gercekleştirmektedir.
ofstream kayit("sifre.txt",ios::app); satırındaki ios::app ifadesini kaldırınız,yani bu ifadeyi su sekilde yazınız -> ofstream kayit("sifre.txt");

Başarılar

Son Düzenleme: muh34 ~ 08 Aralık 2010 23:23
Kapalı Hesap (50160)
08-12-2010, 23:21   |  #14  
OP Kapalı Hesap
Teşekkür Sayısı: 0
61 mesaj
Kayıt Tarihi:Kayıt: Tem 2007

arkadaşlar sorun bendeymiş.herşeyi baştan yaptım dev c++ tıkır tıkır çalıştı :) ÇOK TEŞEKKÜR EDERİM YARDIMIN İÇİN :)