[]
C++ char tanımlama hatası
üçü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();
}
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.
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 (03.05.12 00:18:42)
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";
ya da böyle
string aa = "abcdefghijklmnopqrstuvwxyz";
- ocanal (03.05.12 00:25:22)
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
for(int j=0;j<strlen(alfabe);j++) /şeklinde harf harf alırız kelimeyi/
bundan sonra bir türlü yapamadım
- allstar (03.05.12 00:56:36)
#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;
}
#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 (03.05.12 01:42:44)
#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
#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 (03.05.12 02:57:44)
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
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 (03.05.12 12:54:04 ~ 14:12:53)
ya o kadar yardımcı oldun ki nasıl teşekkür ediceğimi bilemedim çok çok çok sağol
- allstar (03.05.12 13:59:36)
1