PDA

Tam Sürümünü Görmek İçin : C++ ögreniyorum da :)


mawera
22/10/2006, 01:16
merhaba,

burdaki bir cok kisi icin soracaklarim soru dahi sayilmayabilir..yeni basladim programlama ögrenmeye ve su anda bilgi acisindan tüketici durumdayim, üretecegim günlerinde gelir ins :)

ilk bir kac ödevimi yaptim ama sonrasinda takildim..

ilk sorum m ve n basamakli ik sayi okuyan ve m in n. basamagindaki sayiyi veren program (örn. m=1453 n=2 cikti= 5 gibi) nasil yazilir?

sözkonusu bir sayinin basmaklari ile islem yapmaya gelince takiliyorum.aslinda bilgimin olmayisindan kaynaklaniyor

diger sorumyine basamaklarla ilgili uc basamakli sayilar okuyan bu sayilari ters ceviren (örn. girdi 123 cikti 321 gibi) bi program nasil yazilir?


simdilik ik sorum var. simdi henüz ilk ya cekiniyorum cok sormaya:)
cikamazsam isin icinden yine basvurum ben:)

tesekkürler simdiden..


peacefire
22/10/2006, 03:28
dediklerini yapabilmen için c++'ta sanırım dizileri öğrenmen lazım.
c++'ın yazılımını bilmiyorum ama yapman gereken şeyi yazayım koda çevirsin :)
1. sorun için : girilen sayıyı int bir diziye atacaksın daha sonra girilen n sayısı örneğin 3 ise dizinin 3. elemanını ekrana yazdıracaksın. sayi[2] diyerek sayi dizisinin 3. elemanını almış olursun.

2. sorun için ise gene sayiyi bir diziye atman lazım daha sonra azalan bir döngü ile dizinin eleman sayisi kadar çalışacak olan bir döngü ile örneğin 4 elemanlı bir dizi için 4 kere dönecek ve 4ten 0a kadar dönecek bir döngü yaparsın.
ilkönce 4. elemanı daha sonra 3. elemanı yazdırırsın ve tersten yazdırmış olursn.
yazdıklarımın sana ne kadar faydası olur bilmem ama. bir arkdaşta c++'ta yazılımını yazarsa mantığını daha iyi anlamana yardımcı olur belki kolay gelsin.

myavuzselim
22/10/2006, 04:16
CBA diye bir sayimiz olsun. Bu sayinin degeri A + 10*B + 100*C'dir.
Mesela 863 = 3 + 10*6 + 100*8

Bu sayinin n basamagindaki rakami bulmak icin (basamaklar sifirdan baslasin):
- sayiyi n defa 10'a bol (sayi /= 10)
- elde ettigimiz sayinin ona bolundugunde artanini bul. (sonuc = sayi % 10)

Mesela EDCBA sayisinin ikinci basamagindaki (C basamagi) rakami ariyoruz.
(A + 10*B + 100*C + 1000*D + 10000*E) / 10 = B + 10*C + 100*D + 1000*E
(B + 10*C + 100*D + 1000*E) / 10 = C + 10*D + 100*E

(C + 10*D + 100*E) % 10 = C

--------------

sayinin tersini bulmak icin liste kullanmaya gerek yok aslinda:

sayi = BCA = A + 10*B + 100*C
tersi = ABC = 100*A + 10*B + C

yani tersi = basamak(sayi, 2) + 10 * basamak(sayi, 1) + 100*basamak(sayi, 0)

Veya tersi - sayi == 99*(A-C) olduguna gore:
tersi = sayi + 99*(basamak(sayi,0) + basamak(sayi,2))

Hatta her seferinde basamak bulmak icin tekrar donguye girmeye de gerek yok. Daha genel bir sonuc icin soyle bir sey de yeterli:

tersi = 0
sayi > 0 oldugunca:
tersi = 10*tersi + sayi%10
sayi = sayi / 10

mawera
22/10/2006, 20:32
öncelikle tesekkür ederim peacefire ve myavuzselim.peacifire henüz dizileri ögrenmedim ögrenince tarif ettigin gibi alistirma olarak dizilerlede yapacagim;).

myavuzselim ilkini yaptim dedigin gibi ve calisiyor, müthis bisi program yazmak ve yazdigin programin calismasi:) ama ikincisinde bir yerde sorun var..

dedigin gibi yazmaya calistim fakat herseferinde cikti veriyor yani 123 icin önce 3, sonra 32 sonra 321 yazdiriyor ekrana.. ben ise en sonunda sonucu vermesini istiyorum..heryeri denedim olmadi :( nereye yerlestirmeli <cout << " umgekehrtezahl ist " << umgekehrtezahl << endl ;> i?

(bu arada cout ciktilari ve variablelar almanca )


#include <iostream.h>
#include <stdlib.h>

int main()
{
int zahl , umgekehrtezahl ;

cout << "Geben Sie eine Zahl : " << endl ;
cin >> zahl ;

umgekehrtezahl = 0 ;

do {

umgekehrtezahl = ( 10 * umgekehrtezahl ) + ( zahl % 10 ) ;

zahl = zahl / 10 ;
cout << " umgekehrtezahl ist " << umgekehrtezahl << endl ;

}

while ( zahl > 0 ) ;
system("PAUSE");
return 0;


}

myavuzselim
22/10/2006, 21:20
Sayinin tersi dongunun sonunda hesaplanmis oluyor. cout'u dongunun disina, system("PAUSE")'un hemen onune alirsan sorun kalmaz.

mawera
22/10/2006, 21:33
#include <iostream.h>
#include <stdlib.h>

int main()
{
int zahl , umgekehrtezahl ;

cout << "Geben Sie eine Zahl : " << endl ;
cin >> zahl ;

umgekehrtezahl = 0 ;

do {

umgekehrtezahl = ( 10 * umgekehrtezahl ) + ( zahl % 10 ) ;

zahl = zahl / 10 ;


}

while ( zahl > 0 ) ;
system("PAUSE");
cout << " umgekehrtezahl ist " << umgekehrtezahl << endl ;
return 0;


}




bu sekildeyaptim ama Dev-C++ da calistirdigimda cikti vermiyor sadece <cout> yani sayi girinkomutu cikiyor o kadar sayiyi ters cevirmiyor

myavuzselim
22/10/2006, 22:58
system("PAUSE")'un arkasinda degil onune demistim :)

mawera
23/10/2006, 00:13
fazla bisi yazmiyacagim sadaece bu smiley i yolluyorum :utangac:

cok ama cok tesekkür ederim..program yazmaya devam (yo hayir olamaz dediginizi duyar gibi oluyorum) :)

myavuzselim
23/10/2006, 01:06
Yo hayir ben oyle demiyorum ;)

mawera
25/10/2006, 19:55
#include <iostream.h>

#include <math.h>

int main()
{
float alan, yukseklik, taban ;
char secenek ;

cout << "Vereceginiz degere gore ucgenin alani, yuksekligini, tabanini bulur" <<
endl << endl << "Alan icin 'A' yada 'a' giriniz." <<
endl << endl << "Yukseklik icin 'H' yada 'h' giriniz." <<
endl << endl << "Taban icin 'T' yada 't' giriniz." << endl << endl << endl ;

cin >> secenek ;

switch (secenek)
{
case 'A' :
case 'a' :
{
cout << endl << "Yuksekligi giriniz : " ;
cin >> yukseklik ;
cout << endl << "Tabani giriniz : " ;
cin >> taban ;
alan = yukseklik * taban / 2 ;
cout << endl << "Alan = " << alan << endl ;
break ;
}
case 'H' :
case 'h' : {
cout << endl << "Alani giriniz : " ;
cin >> alan ;
cout << endl << "Tabani giriniz : " ;
cin >> taban ;
yukseklik = 2 * alan / taban ;
cout << endl << "Yukseklik = " << yukseklik << endl ;
break ;
}
case 'T' :
case 't' : {
cout << endl << "Alani giriniz : " ;
cin >> alan ;
cout << endl << "Yukseklik giriniz : " ;
cin >> yukseklik ;
taban = 2 * alan / yukseklik ;
cout << endl << "Taban = " << taban << endl ;
break ;
}

}


return 0;
}



ben kaldigim yerden devam ediyorum :)

yukarida görmüs oldugunuz program deger aliyor fakat geriye sonucu döndürmüyor..neden böyle bisi oluyor olabilir acaba ? :garip:

acehreli
25/10/2006, 23:49
Geriye sonuc dOndUrmekten ne kasdettiginden emin degilim. Program deger dOnduruyor ama dOndurdugu hep sifir: return 0;

C++'ta programlar zaten int disinda bir tUr de dOndUremezler. Eger ekrana bir sey yazdirmaktan bahsediyorsan, onu da anlamadim; cunku programi denedigimde ben ekranda sonuclari gorebiliyorum. Bolme islemlerinde sifirla bolme gibi bir risk var tabii ama herhalde ondan da bahsetmiyorsun. (?)

Yine de bir kac yorum yapabilirim:


// <iostream.h> tarih oncesinden kalma deneysel bir basliktir.
// C++'ta onun yerine <iostream> vardir.
// #include <iostream.h>
#include <iostream>

// Asagidaki cout, endl, vs. adlari ad alanlarini (namespace)
// belirtmeden kullandigimiz icin derleyiciye bir ipucu vermemiz gerek:
using namespace std;

#include <math.h>

int main()
{
// float tUrUnU kesinlikle gerektiginden emin oldugun durumlar
// disinda hicbir zaman kullanma. Onun yerine C ve C++'in "dogal"
// ondalikli sayi tUrU olan double'i kullan:
// float alan, yukseklik, taban ;
double alan, yukseklik, taban ;


Ek olarak, case etiketleri altindaki kod satirlarini kendi ayri islevlerine tasimak cok yararli olur:


void alan_hesapla()
{
cout << endl << "Yuksekligi giriniz : " ;
double yukseklik;
cin >> yukseklik ;

cout << endl << "Tabani giriniz : " ;
double taban;
cin >> taban ;

const double alan = yukseklik * taban / 2 ;
cout << endl << "Alan = " << alan << endl ;
}

int main()
{
/* ... */

case 'A' :
case 'a' :
{
alan_hesapla();
break ;
}


Eger ayni seyi butun case etiketlerine de uygularsak; alan, yukseklik ve taban degiskenlerini de main icinde tanimlamak zorunda kalmayiz.

Simdi belki de gereksizce biraz daha ileri gidecegim... :)

alan_hesapla islevinde kod tekrari yapildigini farkedince double sayilar okumak icin bir islev yazar ve kodu daha da temiz hale getirilebiliriz:


double double_oku(const char * soru)
{
cout << endl << soru;
double sayi;
cin >> sayi;
return sayi;
}

void alan_hesapla()
{
const double yukseklik = double_oku("Yuksekligi giriniz : ");
const double taban = double_oku("Tabani giriniz : ");
const double alan = yukseklik * taban / 2 ;
cout << endl << "Alan = " << alan << endl ;
}


Hatta, yuksekligin programda iki yerde birden okundugunu farkederek onun icin de bir islev yazabiliriz:


double yukseklik_oku()
{
return double_oku("Yuksekligi giriniz : ");
}

double taban_oku()
{
return double_oku("Tabani giriniz : ");
}

void alan_hesapla()
{
const double alan = yukseklik_oku() * taban_oku() / 2 ;
cout << endl << "Alan = " << alan << endl ;
}


Ayrica, alan_hesapla icinde 'yukseklik' ve 'taban' diye ayri degiskenler tanimlamadim. yukseklik_oku ve taban_oku islevlerinin dOndUrdukleri degerleri dogrudan hesap icinde kullandim.

Yalniz bu durumda programin her ortamda ayni sekilde calismayacagini gormek gerekir: 'alan' degiskeninin tanimlandigi satirda, yukseklik_oku ile taban_oku islevlerinden hangisinin once cagrilacagi derleyiciye birakilmistir. C ve C++ standartlari bu sirayi belirlemez. Bu yuzden, program derlendigi derleyiciye bagli olarak yuksekligi veya tabani once sorabilir. Ama tabii hesap degismez...

Ali

mawera
26/10/2006, 10:46
cok tesekküler acehreli yorumlarin icin,benim gibi yenibaslayan biriicin cok degerli yorumlar cidden..

programcilik gecmisim 10 günlük henüz ve kavramalari cok iyi tanimiyorum dogrusu,deger döndürmüyordan kastim simdi bende Dev-C++ derleyici var onda Execute --->run yaptigimda acilan siyah pencerede (konsol diyosunuz sanirim :)) örn. h ya bastigimda : Alani girin :
tabani girin :

diyor ve giriyorumda fakat sonuc olarak yukseklik = sudur vs demiyor
tabani girip enter a bastigimda direk konsoldan cikiyor.. bunun sebebi nedir ? onu anlamdim iste.

Bu arada dedigim gibi yorumlar ciden cok degerli cünkü yeniseyler duyunca baska neymis bu diye arastiriyorum ve yeni örneklerle karsilasiyorum buda sanirim programci olabilmenin sartlarindan biri..

acehreli
26/10/2006, 16:45
Aslinde program dogru calisiyor ama sen sonucu goremeden pencere kapaniyor. Programini daha uygun bir ortamda baslatman gerekiyor:

1) Windows'da (Dev-C++'ta degil) Start | Run... tikladiktan sonra Open'a "cmd" yazarak bir konsol penceresi ac

2) Projenin klasorune gec. Ornegin soyle bir komutla:

cd C:\Dev-Cpp\projects\deneme

3) Progamini komut satirinda adini yazip Enter'a basarak calistir. Ornegin adi deneme.exe ise:

deneme

Simdi programinin ciktisi bu konsol penceresi kapanana kadar durur.

Ali

mawera
26/10/2006, 17:37
Simdi programinin ciktisi bu konsol penceresi kapanana kadar durur.



cidden duruyor :)

tesekkür ederim acehreli ..

eger daha önce calsitirmadiysam programi cmd de programin sonuna .exe yazmak gerekiyor ve böylece dev c++ da calistirdiktan sonra olusan konsolun bir exe dosyasi oldugunu ögrenmis oldum, yani yanlsi ögrenmemissem :)

myavuzselim
27/10/2006, 09:40
eger daha önce calsitirmadiysam programi cmd de programin sonuna .exe yazmak gerekiyor ve böylece dev c++ da calistirdiktan sonra olusan konsolun bir exe dosyasi oldugunu ögrenmis oldum, yani yanlsi ögrenmemissem :)
Anlayamadim :) Ama sanirsam windows explorer dosyalarin uzantilarini gizliyor. Bu secenegi kaldir, rahat edersin.

mawera
31/10/2006, 11:47
Anlayamadim :) Ama sanirsam windows explorer dosyalarin uzantilarini gizliyor. Bu secenegi kaldir, rahat edersin.

tamam :)


acil olarak c++ da sayilarin üssleri nasil alinir daha dogrusu bunun icin kullanilan operatör nedir.. 10 üssü 3 ü nasil ifade edebilirim, bunun yaninda sgrt karakök icine almak icin mi karesini almak icin mi kullanilir? Birde tüm bunlari bulabilecegim e- book veya site veya dökuman var mi? türkce olmasi daha iyi olur..

DotNetKid
07/11/2006, 20:21
yanlış hatırlamıyorsam, 10 üssü 3 = 10^3 (^ işareti için Shift + 3 tuşuna basmalısın. basınca sonraki karaktere bastıktan sonra işaret cıkar.)

sqrt karekökünün almak için, yalnız sqr kare almak için.

tüm bunları ve daha fazlasını bulanbilmen için yegane kaynak --> google.com

myavuzselim
07/11/2006, 21:53
c ve benzeri dillerde ^ isareti "exclusive or" islemi icin kullaniliyor.
Eger x ussu a'yi hesaplayacaksak, ve eger a dogal bir sayiysa en uygunu x'i a kere kendisiyle carpmak. Eger a dogal sayi degilse pow fonksiyonu kullanilabilir. pow fonksiyonunun C++'da cmath icinde olmasi lazim sanirsam.

acehreli
07/11/2006, 21:54
DotNetKid, ^ isleci C'de ve C++'ta bitler uzerinde XOR islemi anlamindadir. Us almak icin bir islec yok...

Ali

Mr_MOON
08/11/2006, 18:28
Şöyle bişey karalasak ?

taban a olsun üs b olsun ve c diye tanımlı bi değişkenimiz daha olsun

c=1;
for( ; b; b--)
c=c*a
cout << c;

Hata varsa affola newbie dan bu kadar çıkıyo :)

mawera
19/11/2006, 20:27
ümidimi kesmistim uzun süre cevap gelmeyince o yüzden yeni bakiyorum bir ara 10E2 (10 üssü 2 ) gibi bisi görmüstüm yanlismi hatirliyorum.E nin c++ daki islevi nedir?

pipopim
20/11/2006, 19:25
#include<stdio.h>
void main()

{
int sayi,i,n;
int basamak[10];
printf("lutfen bir sayi giriniz : ");
scanf("%d",&sayi);
i=0;
do
{
basamak[i]=sayi%10;
sayi=(sayi-basamak[i])/10;
i=i+1;
}
while (sayi>0);

printf("%d basakmakli sayinin hangi basmagini istiyosunuz : ",i);
scanf("%d",&n);
printf("%d inci basamaktaki sayimiz %d\n",n,basamak[n-1]);

}

pipopim
20/11/2006, 19:28
#include<stdio.h>
void main()

{
int sayi,i,n;
int basamak[10];
printf("lutfen bir sayi giriniz : ");
scanf("%d",&sayi);
i=0;
do
{
basamak[i]=sayi%10;
printf("%d",basamak[i]);
sayi=(sayi-basamak[i])/10;
i=i+1;
}
while (sayi>0);

printf(" = sayinin tersi\n");
}

mawera
21/11/2006, 16:53
aslinda daha öncesinde yazmistim cevizci arkadaslarin yolgöstermeleri sayesinde ama pipopim sen stdio.h da yazmissin, daha öncesinde bildigim bir program oldugu icin karsilastimak kolay oldu ve stdio.h hakkinda bilgi edinmis oldum programin sayesinde;)

su anda diziler üzerinde calisiyorum.Bir program yazmaya calisiyorum söyle ki :
input -> hastahane
input -> a
output ->hsthne

aslinda bir char Array i girmek icin cin.get..... gibi bir fonksiyon varmis ama su anda ögrenmedigim icin ben döngü ile olusturdum bu kismi..

sorularimi kodun yanina yazdim. tskk..




#include <iostream.h>
#include <stdlib.h>

int main()
{
char eingabe[81],loeschen,!;

cout<<"Bir isaret degeri veriniz : " ;

for (int i=0; i<81; i++){ // cin.get yerine kullanilabilir mi yani dogrumu bu döngü ???
do{
cin>> eingabe[];
}while (eingabe[]!=/0);
}


do{
cout<<"Silinmesini istediginiz isaret degerini veriniz: " ;
cin >> loeschen ;
for (int j=0; j<=sizeof(eingabe); j++){
if (eingabe[j]==loeschen) // eger kosul saglaniyorsa bu Array de bulunan isareti nasil silebilirim?????
}
}while (loeschen!=!);

system("PAUSE");
return 0;
}

mawera
22/11/2006, 13:56
bir sorum daha var:utangac:

bir funktion yazmaliyim bu funktion isaret degerleri alacak sirayla sonra bunlar devreden (cyclic) mi buna bakacak ve dizisi icinde (minumum) devretme sayisini bulacak( verecek) ve eger devreden yoksa bunuda verecek .. tabi bu fubktionu cagiran ana funktion da yazmaliyim..

örn : input ->abcabca
output-> cyclic 3

input-> abcabcd
output -> not cyclic

su sekilde bisi yazdim daha dogrusu yazmaya calistim .sadece hazira konmamak ve kendim cözmek icin yazdim bu kodu yoksa bende farkindayim berbat bir kod. compiler 16 tane hata verdi bir cok yerde sorum var yani kod yanlis,sadece asagis yukari algorithmus u olusturmak icin yazdim..



#include <iostream.h>
#include <stdlib.h>


char Cycle(char input){
int j=0;
int i=0;
char stack []; // compiler stack icin array degeri vermem gerktigini söylüyor ama koda göre bunun olmamasi lazim

do{
stack[]=input[j];
j=j+1;
}while(input[i]!=input[j]);


j=stack.lenght; // interneten ".lenght" diye bisi gördüm ama bunun icin hangi kütüphane cagirilmali???

while(input==/0) { //stack dista tanimli iceride tekrar kullanmak icin yapilasi gereken???

for(int i=0; i<=stack.lenght; i++){
j++;
if(input[i]!=input[j])
return (nicht zyklich);
}
}
}




int main()
{
char input[];
cout<< "Geben Sie Zeichenkette" ;
while(input[]!=/0){
cin>> input[];
}
if (input){
Cycle(char input); // burda sadece bu sekilde yazdigimda yukaridaki kodda sadece else return oldugu icin bunu verir, devirli oldugu durum icinde deger vermesi icin buraya ne yazmali yada yukarida funktionda return u (düzeltilmis bir kodda :))nereye yerlestirmeli..

}
system("PAUSE");
return 0;
}

acehreli
22/11/2006, 22:23
mawera, kendi notlarimda ben de cok karisik seyler yazdim. Bunun nedeni, sunlardan hangisini kullanmak istedigini bastan anlayamadim: char*, vector, string.

Bence hepsini unutup string'i ogren. Isler cok kolay olur. Kendi notlarimin basina [Ali] koydum...


// [Ali] C++'ta <iostream.h> diye bir baslik yoktur. Lutfen o basligi
// artik kullanma. O baslik, C++'in standardinin daha oturmadigi
// zamanlarda deneysel olarak kullanilar bir baslikti. Yani 10 yil kadar
// once deneysel bir baslikti. Onun yerine artik <iostream> var
//
/* #include <iostream.h> */
#include <iostream>

#include <stdlib.h>

// [Ali] Bunu asagidaki stack icin ekliyorum
#include <vector>

// [Ali] Bunu asagida acikladigim gibi, string icin ekliyorum
#include <string>

// [Ali] C++ basliklarindaki adlara erisebilmen icin simdilik su satiri
// ekle. (namespace kavramini ogrenince bunu kullanmak zorunda
// kalmayacagin baska yontemler de ogreneceksin.)
using namespace std;

// [Ali] Asagida acikladigim gibi, galiba burada input'un string olmasi gerekiyor.
// Ayrica, yine asagida anlattigim gibi, bu islevin 'bool' dOndUrmesi gerekiyor.
/* char Cycle(char input){ */
bool Cycle(const string & input){
int j=0;
int i=0;

// [Ali] C++'ta dizilerin buyukluklerini bastan vermen gerekir. Eger
// bastan bilmiyorsan, malloc ve realloc ile duruma gore daha buyuk
// yer ayirabilirsin.
/* char stack []; // compiler stack icin array degeri vermem gerktigini */
// söylüyor ama koda göre bunun olmamasi lazim

// [Ali] C++ kullandigina gore, dizi yerine vector kullanabilir misin:
vector<char> stack;
// [Ali] Oyle yazinca, "stack, icinde char'lar bulunan bir dizidir" demis oluruz.

// [Ali] Aslinda main'den anladigima gore sen burada normal string
// kullanmak istiyorsun galiba. Su daha iyi olurmus:
// string stack;

// [Ali] Sen burada stack'in input'un bir kopyasi olmasini istiyorsun
// degil mi... Onun icin, bu do dOngUsu icine kendi yazdigim notlari
// da kaldirip kisaca stack = input yaziyorum.

/*
* do{
* // [Ali] Bence burada stack'e bir char eklemek istiyorsun. O isi
* // vector'un push_back() isleviyle yapabilirsin.
* /\* stack[]=input[j]; *\/
* stack.push_back(input[j]);
*
* // [Ali] Ayrica, input'a bir diziymis gibi davraniyorsun. (Ya da
* // bir dizgiymis (string) gibi... Ama bu islev cagrildiginda onun
* // 'char' oldugunu soylemistin.
*
* j=j+1;
* }while(input[i]!=input[j]);
*/

// [Ali] Ne kadar kolay degil mi :)
string stack = input;


// [Ali] Oncelikle, bir yazim hatasi yapiyorsun: asagida herhalde
// "length" yazmak istedin.
//
// Burada stack'te kac tane char oldugunu ogrenmek istiyorsun degil
// mi... Bunun icin vector'un size() islevini kullanabilirsin:
/* j=stack.lenght; // interneten ".lenght" diye bisi gördüm ama bunun icin hangi kütüphane cagirilmali??? */
j = stack.length();

// [Ali] Burada herhalde input'un 0 degerinde olup olmadigina
// bakiyorsun. Onun icin '\0' karakter degeriyle karsilastirman
// gerekiyor. input bir char* oldugu icin de, kendisini degil,
// icindeki karakteri karsilastiracaksin. Onun icin *input yaziyorum:
/* while(input==/0) { //stack dista tanimli iceride tekrar kullanmak icin yapilasi gereken??? */
while (*input == '\0') {

for(int i=0; i<=stack.length; i++){
j++;
if(input[i]!=input[j])
// [Ali] Bu islevin sonucunun evet/hayir gibi bir sey olmasi
// gerekiyor. Yani bu islevin 'bool' dOndUrmesi
// gerekiyor. Burada zyklich olmadigini gostermek icin
// 'false' dOndUreceksin.
/* return (nicht zyklich); */
return false;
}
}

// [Ali] Eger buraya gelirsek zyklich demek oluyor galiba; oyle mi? O
// zaman burada da 'true' dOndUreceksin.
return true;
}




int main()
{
// [Ali] Yine, boyutu belirtilmeyen dizi olmaz. Ama zaten sen burada
// string kullanmalisin bence:
/* char input[]; */
string input;

cout<< "Geben Sie Zeichenkette" ;

// [Ali] Oyle yapinca boyle bir while'a da hic gerek yok.
/*
* while(input[]!=/0){
* cin>> input[];
* }
*/

cin >> input;

// [Ali] Burada input'un degil, cin'in iyi durumda olup olmadigina
// bakacaksin. Eger giriste hata varsa, cin kullanilamaz
// durumdadir. Bunu denetlemenin yolu if(cin) seklindedir.
/*
* if (input){
* Cycle(char input); // burda sadece bu sekilde yazdigimda yukaridaki kodda sadece else return oldugu icin bunu verir, devirli oldugu durum icinde deger vermesi icin buraya ne yazmali yada yukarida funktionda return u (düzeltilmis bir kodda )nereye yerlestirmeli..
*/

// [Ali] Ayrica, Cycle'in dOndUrdugu degeri kullanman gerekiyor:

if (cin) {
if (Cycle(input)) {
cout << "zyklich\n";
}
else {
cout << "nicht zyklich\n";
}
}

// [Ali] Bu kume parantezi fazla
/* } */

// [Ali] Bunun programinla hic bir ilgisi yok! :p
/* system("PAUSE"); */

return 0;
}


Ali

myavuzselim
26/11/2006, 03:52
örn : input ->abcabca
output-> cyclic 3

input-> abcabcd
output -> not cyclic


Peki 'abacabac'nin sonucunun ne olmasi lazim? 'cyclic 4' mu, yoksa 'not cyclic' mi?
Eger ilki ise 'abcabcd' de 'cyclic 7' sonucu vermeliydi bence.