üçüncü satırda şu hatayı aldım initializer-string for array of chars is too long.

Tam olarak anlayamadım char bu tip durumlarda yetmiyor mu daha geniş bir tanımlayıcı ile mi tanımlamam lazım.

not:dev-c++ kullanıyorum



int main()
{
**char aa[26]="abcdefghijklmnopqrstuvwxyz";**
char pt[10];
int m,d,q=0,i,j,k[2][2],p[4],pp[4],t[5];
int k1[2][2],k2[2][2],det;

printf("enter the plaintext:" );
scanf("%s",pt);
m=strlen(pt);
printf("enter the numbers:");
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
scanf("%d",&k[i][j]);
}
}

for(i=0;i<m;i++)
{
for(j=i;j<26;j++)

{
if(pt[i]==aa[j])

{
t[q]=j%26;
++q;
}
}
}
p[0]=(k[0][0]*t[0])+(k[0][1]*t[1]);
p[1]=(k[1][0]*t[0])+(k[1][1]*t[1]);
p[2]=(k[0][0]*t[2])+(k[0][1]*t[3]);
p[3]=(k[1][0]*t[2])+(k[1][1]*t[3]);
k1[0][0]=k[1][1];
k1[0][1]=-(k[0][1]);
k1[1][0]=-(k[1][0]);
k1[1][1]=k[0][0];

det=(k1[0][0]*k1[1][1])-(k1[0][1]*k1[1][0]);
for(i=0;i<26;i++)
{
if((det*i)%26==1)
{
d=i;
}
}
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
k2[i][j]=(d*k1[i][j])%26;


}
}
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
if(k2[i][j]<0)
k2[i][j]+=26;
}
}
pp[0]=((k2[0][0]*p[0])+(k2[0][1]*p[1]))%26;
pp[1]=((k2[1][0]*p[0])+(k2[1][1]*p[1]))%26;
pp[2]=((k2[0][0]*p[2])+(k2[0][1]*p[3]))%26;
pp[3]=((k2[1][0]*p[2])+(k2[1][1]*p[3]))%26;
for(i=0;i<m;i++)
{
printf("\nThe decrypted plain text :%c",aa[pp[i]]);
}
getch();
}

 

char aa[26]="abcdefghijklmnopqrstuvwxyz";

boyle bir tanimlama olmaz. ya aa char dizisinin uzunlugunu initiliaze dizisi ile belirleyin. ya da boyutu vermek istiyorsaniz acik acik yazin:

char aa[26]= { 'a','b', ... '\0' }

sorununuz sondaki null karakterini bulamamasindan kaynaklaniyor. initiliaze degeri atandiginda bu otomatik konulur. ancak 26 katakter dolup 27. null yapmaya calistiginda yukaridaki hata olusur.

bdiablo

char aa[26]= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

ya da böyle

string aa = "abcdefghijklmnopqrstuvwxyz";

ocanal

hmm öncelikle teşekkür ederim bir başka şey sorayım konu açılmışken şimdi en basitinden şunu nasıl yaparız bir kelime girildi ve bu ali ben bunu 3 boyutlu bir diziye D[1]=1 D[2]=12 D[3]=9 şeklinde nasıl yerleştiririm

for(int j=0;j<strlen(alfabe);j++) /şeklinde harf harf alırız kelimeyi/

bundan sonra bir türlü yapamadım

allstar

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
string aa = "abcdefghijklmnopqrstuvwxyz";
string input;

cin >> input;
for(int i = 0; i < input.size(); i++){
cout << aa.find(input[i], 0)+1 << endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}

ocanal

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
int main (){
int c,i,j,k,*D;
char kelime[20];
char alfabe[]="abcdefghijklmnoprstuvyz"; /alfabeyi karakter dizisi olarak tanımlıyoruz/
printf("Sifrelencek kelimeyi kucuk harf olarak giriniz:");
scanf("%s",&kelime);

c=strlen(kelime); /sterlen komutu alınan kelimenin kaç karakter olduğunu belirliyor/
printf("%d",c);
for(int i=0;i<c;i++) {
for(int j=0;i<c;j++) {
D = (int *) malloc( sizeof(int)*c ); /kelimenin harflerini sayıya dönüştürürken kullanacağımız sayı dizisi boyutu için dinamik bellek kullanıyoruz/
if(kelime[i]==alfabe[j]){ D[i]=j;} /eğer alfabenin ilk harfi ile kelimenin ilk harfi aynı ise sayı dizisine kaçıncı harf olduğunu atıyoruz değil ise alfabeden sıradaki harfi seçip aynı olana kadar karşılaştırma yapıyoruz/
}}

for(int k=0;k<c;k++) { /şifrelenmiş hali çıktı veren aşama/
printf("%d",D[i]);}}


peki ben bu yazdığımda neden hata alıyorum

allstar

1- son satırda

printf("%d",D[i]);

şeklinde yazmışsın ama for döngüsünde artık "i" değil k değeri kullanılıyor.
_________________________________________________

2- comment'leri buraya kopyalarken yazdığını düşünüyorum, ama yine de söyleyeyim,

/* bu şekilde */

veya

// bu şekilde

comment yazmalısın.
_________________________________________________

3- c++ demişsin ama printf filan kullandığına göre sanırım c olarak derliyorsun kodu,

c'de for loop içerisinde initialize işlemi yapamıyorsun.

yani,

for(int i = 0; i < 26; i++) // sadece c++ için çalışır
int i;
for(i = 0; i < 26; i++) // hem c++ hem de c için çalışır
_________________________________________________

4- bir de iç içe for döngüsündeki ikinci for döngüsünde yani alfabeyi iterate ettiğin bölümde şu şekilde yazmışsın,

for(int j=0;i<c;j++)

dikkat edersen döngü içerisinde j kullanıyorsun ama kontol için i < c demişsin. o yüzden tüm alfabeyi döndürmek yerine sadece girdiğin kelimenin uzunluğu kadar çalışır. bir de üstüne yukarıdaki for döngüsü için de i kullanıldığında iyice garip bir durum ortaya çıkar. doğrusu şöyle olacak,

for(int j=0;j<c;j++)

_________________________________________________

5- son olarak hata değil ama kodun daha hızlı çalışması için bir öneri.
eğer harf alfabede bulunduysa artık kalan diğer harfleri de taramana gerek yok, o yüzden "break" komutuyla for döngüsünü o anda sonlandırabilirsin.

yani şöyle,

for(i=0;i<c;i++) {
for(j=0;j<26;j++) {
if(kelime[i]==alfabe[j]) {
D[i]=j;
break;
}
}
}
_________________________________________________

düzenlenmiş, çalışan koda da buradan bakabilirsin.
dl.dropbox.com

ocanal

ya o kadar yardımcı oldun ki nasıl teşekkür ediceğimi bilemedim çok çok çok sağol

allstar
1

mobil görünümden çık