[]

Mükemmel sayı

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  (03.03.11 21:28:00 ~ 21:46:18) 
ş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  (03.03.11 22:04:27 ~ 22:22:25) 
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  (03.03.11 22:14:44) 
@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  (03.03.11 23:16:50) 
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  (03.03.11 23:28:12) 
ş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  (03.03.11 23:38:02) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler basond, compumaster, fraise, kibritsuyu, rakicandir
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.