Algoritma sorusu

Merhaba, Girilen iki sayı arasındaki değerlerin üç ile tam bölülenlerini topla, beş ile tam bölülenleri çarp ve sonuçları ekrana yazdır? Bunun algoritmasını yazamıyorum.
İyi forumlar,
algoritmadan önce diagrama dökseniz iş yükünüz hafifler.
En son 6 yıl önce algoritma yazmıştım, hatam olursa affola.
  1. Başla
  2. 1.sayiyi gir
  3. 2.sayiyi gir
  4. Fark = 1.sayi-2.sayi
  5. Kalan= 1.sayi ~ 2.sayi
  6. Eğer fark 3'e bölünebiliyorsa git
  7. Sonuc= Kalan+Fark
  8. yazdir sonuc
  9. bitir.
diğer özelliği de buradan yola çıkarak ekleyebilirsiniz.
 
Son düzenleme:
Bir sayının başka bir sayıya tam bölünmesi kalanın yani artanın sıfır olmasıdır. Bölmede kalanı bulma işlemini mod alma ile yapıyoruz. Örneğin 30 mod 5 sıfıra eşittir. Ben basitçe bir algoritma oluşturdum ama ona bakmadan önce kendiniz bir algoritma kurmaya çalışın derim :)
  • Toplam=0 ve Çarpım=1 şeklinde iki değişken belirliyoruz.
  • Girilen iki sayıyı bir döngüye alıp, aradaki sayıları tek tek inceliyoruz.
  • Döngüdeki sayının mod 3'ü sıfıra eşitse o sayıyı Toplam'a ekliyoruz.
  • Aynı şekilde sayının mod 5'i sıfıra eşitse Çarpım ile çarpıyoruz.
  • Dögü bittikten sonra Toplam ve Çarpım değişkenlerini ekrana bastırabiliriz.
 
Burada kafamı karıştıran hem üçe hem beşe bölünen sayılar mesela 15, 30, 45 gibi.
Sorudan anladığım kadarıyla 3'e ve 5'e bölünenleri ayrı işleme sokuyoruz, yani çıktımız toplam ve çarpım olarak iki adet. Döngüyü oluşturduktan sonra döngünün içinde iki ayrı kontrol ve iki ayrı işlem yapmamız gerekiyor, ilk kontrol 3, kinici kontrol 5 için.
Diyelim ki aralığımız 15 ile 20. 15 sayısı ile döngümüz başlasın. İlk kontrolümüz "15 mod 3 sıfıra eşit mi?" eşit olduğu için 15'i toplama ekleyebiliriz. İkinci kontrolümüz ise "15 mod 5 sıfıra eşit mi?" eşit olduğu için 15 ile çarıpım değişkenini çarpmamız gerekiyor. Bu arada kodu hangi dilde yazacaksınız?
 
Sorudan anladığım kadarıyla 3'e ve 5'e bölünenleri ayrı işleme sokuyoruz, yani çıktımız toplam ve çarpım olarak iki adet. Döngüyü oluşturduktan sonra döngünün içinde iki ayrı kontrol ve iki ayrı işlem yapmamız gerekiyor, ilk kontrol 3, kinici kontrol 5 için.
Diyelim ki aralığımız 15 ile 20. 15 sayısı ile döngümüz başlasın. İlk kontrolümüz "15 mod 3 sıfıra eşit mi?" eşit olduğu için 15'i toplama ekleyebiliriz. İkinci kontrolümüz ise "15 mod 5 sıfıra eşit mi?" eşit olduğu için 15 ile çarıpım değişkenini çarpmamız gerekiyor. Bu arada kodu hangi dilde yazacaksınız?
C++ ama henüz kod yazma safhasına gelmedik üniversitede.
 
Bu problem C ile şu şekilde yazılabilir:
C:
#include <stdio.h>

int main(){
    int sayi1,sayi2;
    int i,sum,mul=1;
    printf("Birinci sayi giriniz:");
    scanf("%d",&sayi1);
    printf("Ikinci sayi giriniz:");
    scanf("%d",&sayi2);
    
    for(i=sayi1;i<sayi2;i++){
        if(i%3==0){
            sum+=i;
        }else if(i%5==0){
            mul*=i;
        }
    }
    
    printf("3 ile bolunenlerin toplami:%d\n",sum);
    printf("5 ile bolunenlerin carpimi:%d",mul);
    
    return 0;
}
 
@metropoltilkisi Kod tarafında yardımcı olmaya çalışmış ancak 3 eksik nokta var. For döngüsünün başlangıcı sayi1 değişkeninin bir fazlası olmalı ki aradaki rakamları alsın, seçilen rakam döngüye dahil olmasın. Ek olarak sayi1 değişkeninin sayi2 değişkeninden küçük olacağının garantisi yok. Hangisinin küçük olduğunu da tespit etmek lazım döngüye başlayabilmek için. Son olarak ise "İF" döngüsünden sonra "Else İf" kullanırsak 3 ve 5'in ortak katlarına denk geldiğimizde toplamaya dahil eder ancak çarpmaya dahil etmez. Bu yüzden İF döngüsünden sonra tekrar İF döngüsü ile devam etmeli, 3 ve 5 için ayrı ayrı, birbiriyle bağımsız olarak kontrol sağlamalıyız.

@Cumali Dağ Eğer sizden istenen algoritmada genel ifadeler varsa ona göre görsel atacağım.
Ben yine de zor olan tarafı yani kodların mevcut olduğu bölümün görselini atıyorum sana.

Açıklamasını da ekleyeceğim daha net anla diye. Döngü işleri ne yazık ki biraz karışıktır. Ben de geliştirdiğim projelerde öyle noktalara geliyorum ki beynim allak bullak oluyor. Çok basit gibi görünen bir istek bile insanın beynini yorabiliyor şekilde göründüğü gibi :) Daha doğrusu hesaba katmadığınız ihtimaller olabiliyor. Yukarıdaki örnekte 3 tane gözden kaçan detay saydık mesela, bunların hepsi büyük projeler kodladığın zaman başına açılacak felaketlerdir :D Ufak görünür ancak koca bir programın hatalı çalışmasına sebep olur. Programlamada hataya yer yok bu yüzden. Belki ben de hata yapmışımdır gece 4'de çiziyoruz malum :D

1.fw.png

Bazı yerler C# dilinde, bazı yerlerdeki kod kalıpları ise kısaltılmış, algoritma olduğu için şuan bir sakıncası olmaz :)
Son olarak b,top,carp gibi veri girişi sağlanmayan değişkenler ayrı bir şekil içerisinde gösteriliyordu galiba, sen daha iyi bilirsin şemaları.
 
C++:
#include<iostream>
using namespace std;
int main()
{   
    int top=0;
    int carp=1;
    int syc,x,a,b;
    cin>>a>>b;
    if(a<b)
    {
        syc=a;
        x=b;
    }
    else
        {
       syc=b;
       x=a;
        }
    for(int i=syc+1;i<x;i++)
    {
      if(i%3==0) top=top+i;
      if(i%5==0) carp=carp*i;
    }
    cout<<"Toplam="<<top<<"\n\n Çarpım="<<carp;
}
 
Uyarı! Bu konu 6 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Yeni konular

Geri
Yukarı