[teknik]
(6) 

Mükemmel sayı

Monat #229089
hoca C ödevi verdi.
klavyeden sayı girilecek.bu sayı mükemmel sayıysa ekrana "mükemmel sayı", değilse "mükemmel değil" yazdırılacak.
(mükemmel sayı kendisi dışında tam bölenleri toplamı kendisini veren sayı.Örn:
6=3+2+1)

yazdığım kod tam olarak bu fakat işlemi yapmıyor.sayıyı giriyorum enter yapıyorum öyle kalıyor çıktı fln yok ortada.sorun if in bulunduğu parantezde gibi geliyor bana.
sizce hata nerde?

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int sayi,sayac,toplam=0;
scanf("%d", &sayi);
for(sayac=1;sayac=sayi;sayac++){
if (0==sayi%sayac)
toplam+=sayac;
else;
}

if (sayi==toplam)
printf("mükemmel sayı");
else;
printf("mükemmel değil");

system("PAUSE");
return EXIT_SUCCESS;
}

 

for içinde sayac=sayi değil de sayac<=sayi olması lazım. hatta sayi yerine orada sayi/2 kullanırsanız döngü daha kısa sürmüş olur.

lemmiwinks

şu anda kodu deniycek ortamım yok ama şu bölümde
{
int sayi,sayac,toplam=0;
scanf("%d", &sayi);
for(sayac=1;sayac=sayi;sayac++){
if (0==sayi%sayac)
toplam+=sayac;
else;
}

sayac=sayi bu kontrol böyle yapılmaz. daha doğrusu bu bi kontrol değil atama. mesela sayac==sayi diyebilirsin. ama sayac <= sayi desen daha iyi.
ve bu kontrol de yanlış. if (0==sayi%sayac) değişken hep sol tarafta olsun. şöyle yap yap bunu da. if (sayi%sayac == 0)

ve else'ten sonra ; olmaz. ayrıca noktalama işaretlerinden sonra boşluk bırak okunması daha kolay olur, daha düzenli görünür.
yani şu haliyle bi dene bakalım:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int sayi,sayac,toplam=0;
scanf("%d", &sayi);
for(sayac=1; sayac <= sayi; sayac++){
if (sayi%sayac == 0)
toplam+=sayac;
else;
}

if (sayi==toplam)
printf("mükemmel sayı");
else
printf("mükemmel değil");

system("PAUSE");
return EXIT_SUCCESS;
}

tepedeki psychedelic adam

static void Main(string[] args)
{
int sayi, sayac, toplam = 0;
Console.WriteLine("bir sayi gir tosunum: ");
sayi = Convert.ToInt32(Console.ReadLine());
for (sayac = 1; sayac < sayi; sayac++)
{
if (sayi % sayac == 0)
{
toplam += sayac;
}
}

if (toplam == sayi) Console.WriteLine("mukemmel");

else Console.WriteLine("mukemmel degil");

Console.ReadLine();
}

muslum tangoze

@tepedeki psychedelic adam
kod çalıştı sadece tek bir hata var
sayac <= sayi yapınca verdiğim örnekte 6=1+2+3+6 oluyor ve kural gerçekleşmiyor."=" i kaldırdım ve tam oldu
@muslum tangoze
usta Cye yeni başladım yazdığım kodlardan da belli ama senin kodlar fazla ileri gibi pek anlayamadım muhtemelen senin kod da çalışıyordur fakat derleyici ufak hatalar verdi o kodlarla alakam olmadığı için çözemedim
@lemmiwinks
dediğin şey doğru ve normal şartlarda işe yaraması lazım fakat "sayac==sayi/2" şartını yazınca program düzgün çalışmıyor o çok ilginç.bir tek o sorun kaldı.

hepinize teşekkürler

Monat

aslında muslum'un yazdığı daha sade ve anlaşılır ama kendin yazmadığın için karışık gelmiştir. bi de c++ aslında o da bu kadar basit kodda bişey fark etmez zaten. ayrıca ben dikkat etmemişim mesela burda sondaki else;'in de hiçbi anlamı yok.
aslında hata verebilirdi ama vermemiş demek sende. o satırı sil.
{
int sayi,sayac,toplam=0;
scanf("%d", &sayi);
for(sayac=1; sayac <= sayi; sayac++){
if (sayi%sayac == 0)
toplam+=sayac;
else;
}
ve evet <= konusunda haklısın yanlış düşünmüşüm ama sayi/2 yapınca doğru sonucu vermemesinin nedeni o ='i kaldırmış olmandır büyük ihtimalle. yani for'u şöyle yaparsan sayi/2 ile de çalışması lazım:
for(sayac=1; sayac <= sayi/2;sayac++)

tepedeki psychedelic adam

şimdi çalıştı dediğin gibi
for(sayac=1; sayac <= sayi/2;sayac++) ile oldu.else yi de sildim sorun çıkmadı.hallettim yani sorunu.teşekkürler

Monat
1

mobil görünümden çık