Yazan : Şadi Evren ŞEKER

Soru 1) Bir dosyaya isminizi yazdırınız.

Çözüm 1) dosyaya ismimizi yazdıran kodu aşağıdaki şekilde yazabiliriz:

Yukarıdaki kodda dikkat edilecek bir husus, dosyanın “r” değil “w” şekliyle açılması ve dosyanın mutlaka kapatılmasıdır. Bilindiği üzere kapatılmayan dosyalara yazıldığından kesin olarak emin olamayız ve dosya kapatılmadıysa içerisine bilgi yazılmamış olabilir.

Yukarıdaki kod çalıştırıldıktan sonra aynı dizin içerisinde “dosya.txt” isimli bir dosya oluşturulur ve bu dosyanın wordpad benzeri bir programla açılması durumunda içinde ismimizin yazdığını görebiliriz.

Soru 2) Klavyeden okunan bir sayının asal çarpanlarını ekrana basan kodu yazınız.

Çözüm 2)

Yukarıdaki kodda görüldüğü üzere önce bir sayı okunmuş (kodun 7. Satırı) ardından bir döngü içerisinde, 2’den başlayarak bütün sayılara bu girilen sayıyı bölme denenmiştir. For döngüsünün (8. Satır) koşulu, sayının 1’den büyük olmasıdır. Dolayısıyla sayı 1 olunca yani bütün asal sayılara bölümü tamamlanınca çalışma duracaktır.

Yukarıdaki kodda bulunan iç döngü (9. Satırdaki while döngüsü) ise bir asal sayının birden fazla kere bölme ihtimaline karşı yazılmıştır. Örneğin 60 girdisi için 2 asal sayısı, 2 kere bölebilir. Bu durumda bir sonraki asal sayı ile deneme yapılmadan önce, şu anda bölmeyi denediğimiz asal sayı ile bölünmeyinceye kadar deneme yapıyoruz.

Kodun 11. Satırında ise, denediğimiz sayının, girilen sayıyı tam bölmesi durumunda bölerek sayıyı küçültüyor ve başarılı olarak bölebildiğimiz bu sayıyı bir çarpan olarak ekrana yazıyoruz.

Kodun örnek çalışması aşağıdaki şekildedir.

Soru 3) Bir dizgideki kelime sayısını ekrana bastıran kod yazınız.

Çözüm 3)

Soruda, girilen bir dizgideki (String) kelime sayısının saydırılması istendiği için, dizginin scanf ile okunması mümkün değildir. Bilindiği üzere scanf tek bir kelime okur ve bu durumda işe yaramaz. Birden fazla kelimenin boşlukları ile okunması istenen durumda gets fonksiyonu kullanılabilir. Yukarıdaki kodun 6. Satırında da bu şekilde dizgi okunmuştur. Ardından dizgide bulunan boşluklar dizgi sonuna kadar saydırılmıştır. Dizgi sonu kontrolü 8. Satırda bulunan for döngüsünde yapılırken, dizgi içerisinde o anda bakılan karakterin boşluk karakteri olup olmadığı 9. Satırdaki if kontrolü ile yapılmıştır. Şayet boşluk karakteri ise, kelimesayısı değişkeni 1 arttırılmıştır.

Basitçe hesaplanacağı üzere, bir dizgideki boşluk sayısı, kelime sayısından 1 eksik olur. Bu problemin çözümü için kelimesayısı değişkeni 0 yerine 1’den başlatılmıştır.

Kodun çalışan hali aşağıda verilmiştir.

Soru 4) Bir dizgideki en uzun kelimeyi bularak ekrana bastıran kodu yazınız

Çözüm 4)

Yukarıdaki kod, 3. Sorudaki koda benzer şekilde, dizgi sonuna kadar bütün karakterleri kontrol etmekte ve boşluk karakterlerinde kodun 15. Satırında bulunan if kontrolüne girmektedir. Bu kodda farklı olan bir özellik, iki adet karakter göstericisi (character pointer) ile dizgi üzerinde işaretleme yapılmasıdır.

Bu göstericilerden kelimebasi isimli gösterici, o ana kadar bulunan en uzun kelimeyi göstermekte, yenikelime göstericisi ise, üzerinden geçilen son kelimeyi göstermektedir.

Kodun çalışmasını aşağıdaki şekilde anlayabiliriz:

Yukarıda gösterildiği üzere, ilk başta iki gösterici de dizginin ilk karakterini göstermektedir. Ayrıca kelimeboyu ve yeniboy değişkenlerinin değeri 0’dır.

Ardından kodumuz döngü içerisinde karakter karakter ilerlemekte ve ilk boşluğu gördüğü anda aşağıdaki şekilde yeni kelim değişkeni hareket ettirilmektedir.

İlk boşluğa gösterici hareket ettirildikten sonra boşluğa kadar olan harf sayısı sayılmakta ve yeniboy 3 olmaktadır.

Tekrar bir boşluk karakterine kadar göstericimiz hareket eder:

Bulduğumuz yeni kelimenin boyu 4 olduğu ve şimdiye kadar bulduğumuz en uzun kelimeden daha uzun olduğu için kelimebasi göstericisini ilerletiyor ve yukarıdaki şekilde bulunan yeni kelimenin ilk karakterine atıyoruz, ayrıca yenikelime göstericisi, mevcut konuma ilerletiliyor ve bir sonraki kelimenin aranmasında kullanılıyor.

Yeni bulunan kelime boyu, o ana kadar bulunan kelime boyundan daha küçük olduğu için kelimebasi değişkenimiz hala o ana kadar bulunmuş en uzun kelimeyi göstermeye devam ediyor.

Bir önceki örnekte olduğu gibi, bulunan yeni kelimenin boyutu, ilk kelimeden büyük olmadığı için değişkenimiz ilerlemiyor.

Son olarak bulduğumuz yeni kelimenin boyu, şimdiye kadar bulunan kelimelerden uzun olduğu için, göstericiyi ilerletiyor ve kelimebasi olara bu kelimenin ilk harfini gösteriyoruz. Sonuçta dizgi sonuna kadar giderken, anlık olarak bir kelimenin boyutu değişkende tutuluyor, bir kelimenin boyutunun bu değişkende tutulan boyuttan daha uzun olması durumunda bu kelimeyi gösteren bir gösterici işaretleniyor ayrıca bu yeni kelimenin boyutu, elimizde o ana kadar bulunan en uzun kelime boyutu olarak tutuluyor.

Kodun çıktısı aşağıdaki şekildedir:

Soru 5) Kullanıcıdan bir sayı okuyarak, okunan bu sayı boyutlarında bir kare matrisi, her hücresine, en yakın kenara olan uzaklığı ile doldurunuz.

Çözüm 5)

Soruda her hücreye, en yakın kenara olan uzaklık yazılması istenmiş, bu durumda örneğin 5×5 boyutunda bir matris için aşağıdaki şekilde veri girilmesi gerekir:

1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

Görüldüğü üzere kenar değerlerine 1 , bir içerdeki hücrelere 2 ve en ortadaki hücreye 3 yerleştirilmesi istenmiş.

Bu dorunun çözümünde sadece döngüler kullanılarak bir döngünün kenara olan uzaklığı hesaplanıp ekrana yazdırılabilir. Bu yöntemin çözümü aşağıdaki şekildedir:

Yukarıdaki kodda görüldüğü üzere, her hücre için, hücrenin kenara olan 4 farklı uzaklığı hesaplanmıştır. Bu değerlerden iki tanesi, koordinatları olan i ve j değerleridir ki bu değerler, sol kenara ve üst kenara olan uzaklık olarak düşünülebilir.

Ayrıca sağ kenar ve alt kenara olan uzaklıkların hesaplanması kodun 20. Ve 21. Satırlarında bulunan a ve b değişkenleri ile yapılmıştır. Matrisin boyutundan koordinat çıkarılmış ve 1 ilave edilmiştir.

Sonuçta elimizde 4 farklı kenara olan 4 farklı uzaklık bulunmaktadır. Bizden istenen bu uzaklıklardan en küçüğünü ekrana basmamız. Bu durumda kodun 4-13 satırları arasında bulunan ve verilen 4 sayıdan en küçüğünü döndüren fonksiyonu çağırarak bu 4 uzaklıktan en küçüğünü bulabiliriz.

Kodun çalışan hali aşağıdaki şekildedir:

Yorumlar

  1. sarııı

    ben b.t.t. bölümünegiden 10 sınıf ögrenciyim hoca benden C koduyla üç sayı girerek girilen sayılardan ör:25 sayısına en yakın sayıyı bulmamı istedi bana yardımcı olabilirmisiniz

  2. Şadi Evren ŞEKER Article Author

    Elbette yardımcı olabiliriz. Basit bir formül ile 25'e yakınlığı test etmeye çalışalım. Buradaki sorun 25'ten büyük ve küçük sayılar arasındaki mesafenin değişmesidir. Örneğin 22 sayısı ile 25 arasında 3 varken 28 ile de 3 vardır. O halde bu iki sayı eşit uzaklıktadır. Ancak siz
    mesafe = 25 - (girilen sayı)
    şeklinde bir formül kullanırsanız sonuçta 28 gibi bir sayı için mesafe -3 çıkarken 22 için mesafe +3 çıkacaktır. Bu + ve - problemini çözmek için genelde mesafenin karesi alınır (kare alma fonksiyonu çift bir fonksiyondur ve sonucu her zaman pozitif döner)
    mesafe = (25 - (girilen sayı))2
    şeklinde yazarsak 22 için de 28 için de sonuç 9 çıkacaktır ve fonksiyonumuz her durumda çalışacaktır.
    O halde problemimizi artık kodlayabiliriz:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    #include <stdio.h>
    int main(){
       int enyakinmesafe=25;
       int enyakinsayi=25;
       for(int i = 0;i<3;i++){
         int sayi;
         scanf("%d",&sayi);
         if((25-sayi)*(25-sayi)<enyakinmesafe){
                    enyakinmesafe = (25-sayi)*(25-sayi);
                    enyakinsayi = sayi;
         }
       }
       printf("en yakin sayi : %d",enyakinsayi);
    }

    Yukarıdaki kodun çalışması sonucu aşağıdaki şekildedir:

    SADIs-MacBook-Air:prolog sadievrenseker$ ./a.out
    15
    22
    28
    en yakin sayi : 22

  3. yavuz kececi

    3. soruda 9. satır içinde if koşuluna dizgi[i+1]!=" " kodunu eklemezsek bir boşlukta birden fazla kez space tuşuna basılmış ise kelime sayısının fazla dönmesiyle karşılaşırız.
    teşekkürler

  4. eda balcı

    hocam soracam sorunun bu konuyla alakası yok ama c++ ya dda java da ebob ekok bulma programı yapıyoruz..bir muhendis olarak hangi yazılımlarda bu işimize yarayacak..şimdiden teşekkürler hocam

  5. Şadi Evren ŞEKER Article Author

    Sorunuzu şu şekilde anlıyorum. Bilgisyar Mühendisliği eğitimi sırasında, çok fazla sayıda, gerçek hayatta doğrudan kullanılmayan kod yazıyorsunuz ve bu kodları yazarken verdiğiniz emeğin değip değmeyeceğini soruyorsunuz.

    Siz üniversitede öğrenci olarak ilk okulu, listeyi bitirmiş binlerce sayfalık not tutmuş birisisiniz. Bu tuttuğunuz notların yanına kişisel olarak yazdıklarınızı da ekleyin. Ömrünüz boyunca bir yerlere yazdığınız bütün cümleleri bir düşünün. Gerçek hayatta yazı yazmak işinize yarayan birşey ve binlerce sayfalık yazı yazmışsınız. Peki bu binlerce sayfa yazının arasında kaç kere "Ali topu at." cümlesini yazdınız? Gerçek hayatta kaç kere bu cümleye ihtiyaç duydunuz? Defterlerinize yazdığınız cümlelerin kaçta kaçı "Ali topu at." cümlesi?

    İlk okulda size bu cümleyi yazdırmalarındaki amaç, yazı yazmayı öğretmekti. Elbette farklı cümleler de kullanılabilir ama karmaşık olmayan basit, öğrenmenizi sağlayacak bir cümleye ihtiyaç var ki yazı yazmayı, cümlenin ne olduğunu öğrenesiniz ve bu bilgiyi hayatınızın geri kalanında kullanasınız ve hayatınızın geri kalanındaki milyonlarca cümleyi buradan edindiğiniz tecrübe ile doğru bir şekilde kurasınız.

    Bilgisayar mühendisliği eğitiminde de, gerçek hayatta, belki kullanacağınız, belki hiç kullanmayacağınız pek çok kod yazıyorsunuz. Bunların amacı size gerçek hayatta işinize yarayacak bilgiyi ve tecrübeyi kazandırmaktır.

    Elbette elmizde mükemmel bir eğitim sistemi yok ve hataları olduğunu biliyoruz. Ayrıca yine biliyoruz ki, farklı eğitim metodu önerileri, zaman içinde çıkacak ve eğitim sisteminde değişiklikler olacaktır ama şimdilik elimizdeki en iyi yöntem, henüz programlamayı yeni öğrenmiş kişilere altından kalkabilecekleri basit program örnekleri vermek (ebob gibi) ve bu örneklerle kendilerini geliştirmelerini sağlamak.

    Bu arada benim çok fazla sayıda projemde ebob kod yazmam gerektiğini de belirteyim. Belki bu durum şifreleme ile ilgilenmemden kaynaklandı, herkes aynı ihtiyacı duyacak diye bir kural yok ama bence yazdığınız kodlardan öğrendiğiniz size kardır.

    Zaten aksi de mümkün değil. Yani herkesin hayatının sonuna kadar hangi şirkette çalışacağını ve tam olarak nelere ihtiyacı olacağını bilebilseydik. Ve herkese özel bir eğitim sistemi uygulayabilseydik, tam olarak istediklerinizden oluşan bir eğitim içeriği hazırlayabilirdik. Ama aldığınız eğitim genel bir eğitim ve aranızda çok farklı alanlarda çalışacak kişiler var. Dolayısıyla eğitim içeriğinde belki hayatınızda hiç kullanmayacağınız şeyler olması çok normal.

    Bütün bunların yanında unutmayın ki sizin çalışma hayatınız boyunca, henüz hiç hayal bile edilmemiş teknolojileri kullanmanız gerekecek (en azından istatistikler bize bunu gösteriyor).

    Pek çoğunuz belki de şu anda ismi bile olmayan mesleklerde çalışacak. Geçmişe baktığımızda, hiçbirimiz eğitimini aldığımız dilde kod yazmıyoruz. Örneğin ben 1. sınıfta pascal dili almıştım. Bugün bu dil neredeyse hiç kullanılmıyor. Görüldüğü üzere, size sadece ve doğrudan işinize yaracayak şeyleri anlatmak imkansız.

    Sorunuza dönecek olursak, bir mühendis olarak, iyi bir mühendis olmaya bakın, şu anda yapabileceğiniz en iyi şey bu.

    başarılar

  6. ufuk ertan

    hocam soracağım soru asal sayılar ile ilgili.... soru şöyle; kullanıcı tarafından girilen bir sayıyı asal çarpanlarına ayırıp daha sonra asal çarpanlarının üslerini hesaplayan bir program nasıl yazabilirim...

    örneğin; n=24 sayısı çarpanları; 2*2*2*2*3 yani 2 üssü 4 * 3 üssü 1 şeklinde olur.. sonuçta çıkan işlemde kaç tane asal çarpan varsa o sayıyı 2 ile çarpacaz.. mesela 24 sayısında 2 ve 3 asal çarpanları 2 tane var bunu 2 ile çarparsak üsler toplamını 2*2=4 buluruz normalde de üslerin toplamı 3+1= 4 oluyor...

    algoritma mantığını ancak bu kadar çıkarabildim ama programı bi türlü yazamadım bu konuda yardımcı olursanız sevinirim....

    şimdiden teşekkürler....

  7. Şadi Evren ŞEKER Article Author

    Asal çarpanlara ayırdıktan sonra bu değerleri bir dizide tutmayı deneyin. Örneğin yukarıdaki soruda verilen çarpanlara ayırma koduna ilave olarak bulunan çarpanları doğrudan ekrana basmak yerine önce bir diziye atıp ardından eşit olanları basabilirsiniz. Farklı bir yöntem olarak da eski üst değerini tutup üst değerinde değişme olduğunda sayaç kullanabilirsiniz.

    Aşağıdaki şekilde kodlanabilir: (Yukarıdaki 3. sorunun çözümünde 7. satırdan sonrası için):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    int sayac = 0;
    for(int i = 2 ; sayi > 1;i++){
       if(sayi%i == 0){
          while(sayi%i == 0){
             sayac ++;
             sayi = sayi / i ;
          }
          printf("%d^%d   ",i,sayac);
          sayac = 0;
       }
    }

    Başarılar

  8. koray1234

    slm hocam sıze bı sorum olucak.diskte sayı.txt olarak kayıtlı dosyanın her satırında 0ile 10000 arasında sayılar kayıtlıdır. bu içeriği okuyup diskte sayi2.txt ismi altında sayıların 1000e bölünmüş hallerını kayıteden c programını sorabilirmiym.tesekkur edrım.

  9. Şadi Evren ŞEKER Article Author

    Yapmanız gereken, ilk dosyayı okuduktan sonra aldığınız değerleri sayıya çevirmektir. Bunun için iki yoldan birini izleyebilirsiniz. Birincisi dosya içeriğini fscanf fonksiyonu ile %d kullanarak sayı olarak okumaktır ki bu sayede bir int değişkene değer atayabilirsiniz. Diğer yol ise okuduğunu string değerleri atoi fonksiyonu kullanarak int değere çevirmektir.

    Ardından okunan değerleri bölebilir ve ikinci bir dosyaya yazdırabilirsiniz. Kabaca müsvette kodu aşağıdaki şekilde olacaktır:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    dosya1 aç
    dosya2 aç
    dosya1'in sonuna gelen kadar {
      dosya1'den değer oku
      okunan değeri 1000'e böl
      bölünmüş değeri dosya2'ye yaz
    }
    dosya1'i kapat
    dosya2'yi kapat

    Kim olduğunuzu ve sorunuzun ödev olup olmadığını bimediğim için ancak bu kadar yardımcı olabiliyorum aslında oldukça basit bir kod ama en kötü yazmaya çalışın, kodunuzu ve takıldığınız noktaları sorun ve yardımcı olmaya çalışayım.

    Başarılar

  10. şafak

    merhaba benim sorum şöyle;
    benden bi sayı girmem isteniyor ve asallarına ayırmam gerek..örneğin 12 girdiğimde 2-2-3 ekrana çıkmalı.ben çarpanlarına ayırdım ancak ekrana şöle bi sonuç çıkardım: 2-2-3- sondaaki (-) işaretinden kurtulamadım..ayrıca programi for kullanmadan yazmalıyım..yardımcı olur musunuz?

  11. Şadi Evren ŞEKER Article Author

    herhangi bir ekran çıktısının sonunda bulunan işareti silmek istiyorsanız iki yol bulunuyor.

    1. C dilindeki sringler içerisinde b karakteri back space (yani geri silme) anlamı taşır.

    Örneğin printf("alibabab") komutu, ekrana alibab çıkarır ve sondaki a harfini basarken siler.

    2. döngü içerisindeki basma işlemleri sırasında, ilk basılan veya son basılanı özel olarak ele alırsınız. Örneğin bütün terimleri -x şeklinde basıyorsanız, ilk basılan terimde - koymamak veya bütün terimleri x- şeklinde basıyorsanız, son basılan terimde - koymamak birer alternatif olabilir.

    Programları döngü kullanmadan yazmak istiyorsanız özyineli fonksiyonlar (recursive functions) başlıklı yazıyı okuyabilirsiniz, ayrıca sitede bu konuda sorulmuş ve çözülmüş çok sayıda örnek bulunuyor. Şayet for kullanmamak ile kat ettiğiniz while kullanabileceğiniz ise o zaman for döngülerinin tamamı while döngüsüne çevrilebilir.

    Başarılar

  12. ebru

    merhaba hocam ,
    benim sorum bir f fonksiyonunun (A,B) aralıgında kökü oldugu bilinmektedir.köklerin bulundugu baska bir aralık (a,b) olmak üzere a ve b yi b.a en küçük olacak şekilde belirleyen algoritmayı çiziniz.
    yardımcı olursanız sevinirim .

  13. ebru

    hocam burda bir not vardı onu yazmayı unutmuşşum
    not:a>A ve b<B ve A,B,a,b birer tamsayı bu nota gre istiyor hocam .

  14. beyza

    hocam bnm sorum şöyle: kullanıcıdan pozitif bir sayı girmesi istenecek ve sayının tek rakamları ekrana toplanmış olarak çıkacak.örneğin sayı 12345 ise ekranda 1+3+5=9 çıkmalı..(sayımız 3-4-5... ne kadar istersek o kdr basamağa sahip olabilir,yani 457467575 olabilir 12 de..kullanıya kalmıs.)ben tek rakamları toplamayı basardım ama 1+3+5=9 şeklinde gösteremedim,,tesekkurler

  15. Şadi Evren ŞEKER Article Author
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    int x;
    scanf("%d",&x);
    int toplam=0;
    while(x>0){
     int s = x%10; // sayinin son hanesini al
     if(s%2==1){ // tek sayi demektir
       printf("%d+",s);
       toplam += s;
     }
     x/=10; // sayinin son basamagini sil
    }
    printf("b=%d",toplam);
  16. gülpembe

    hocam ben çevre müh. de okuyorum fakat turbo c görüyoruz. finalde asansör kodları girip 5 katlı bir ev yapcakmışız, her katta da ses çıkarcakmış. internette örneğini bulamadım bu ödevi yapamıyorum yardımcı olursanız sevinirm.teşekkurler.

  17. Şadi Evren ŞEKER Article Author

    Sorunuz pek birşey ifade etmiyor, tam metnini aktarırsanız yardımcı olmaya çalışayım. Muhtemelen bir senaryo üzerinden bazı kodlar yazmanız isteniyor ama aktardığınız kadarı çok anlaşılır değil.

    Başarılar

  18. deniz

    iyi günler hocam benim de size bir sorum olacak şöyle ki :kullanıcı tarafından girilen sayıdan küçük en büyük asal sayıyı ekrana yazdıran program algoritmasını yapamadım yardımcı olursanız sevinirim.

  19. Şadi Evren ŞEKER Article Author

    Basitçe girilen sayıdan azaltarak sayının asal olup olmadığını kontrol etmemiz gerekiyor.

    Sayının asal olduğunu kontrol etmek çok basit, bir döngü ile kendisinin kareköküne kadar olan sayıların tam bölüp bölmediğine bakacağız. (Fermat teoremine göre)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    for(int j = n; j>2 ;j--){
       int bayrak  = 1;
       for (int i = 2; i<sqrt(j) ; i++) // ilk asal sayıdan başlıyoruz
          if( j % i == 0) //tam bölen sayı var demektir
             bayrak = 0;
       if(bayrak == 1){
          printf(" sayi : %d", j);
          break;
       }
    }

    Test edip çalıştıramadım ama sanırım doğru çalışır.

    Başarılar

  20. Şadi Evren ŞEKER Article Author

    Kodu yazdım ve test ettim tam hali aşağıdaki şekilde:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
     
    #include <stdio.h>
    #include <math.h>
     
    int main(){
       int n;
       scanf("%d",&n);
     
       for(int j = n; j>2 ;j--){
          int bayrak  = 1;
          for (int i = 2; i<sqrt(j) ; i++) // ilk asal sayıdan başlıyoruz
             if( j % i == 0) //tam bölen sayı var demektir
                bayrak = 0;
          if(bayrak == 1){
             printf(" sayi : %d", j);
             break;
          }
       }
    }
  21. Şadi Evren ŞEKER Article Author

    Bir dizgiden (string) okuyup diğer bir dizgiye (string) boşlukları atlayarak atabilirsiniz. Diğer bir çözüm de dizgideki elemanları kaydırmak olabilir. İkisini de yazayım:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    #include <stdio.h>
     
     
    int main(){
     
    char a[100];
    gets(a); //boşluk girileceği için gets ile okuyourz, scanf çalışmaz
    char b[100];
    int say = 0;
    for(int i = 0;i<100;i++)
      if(a[i]!=' ')
       b[say++] = a[i];
    printf("%s",b);
    }

    Çalışan hali aşağıdaki şekildedir:

    diğer çözüm, yani kaydırma da aşağıdaki şekilde yazılabilir:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    #include <stdio.h>
     
     
    int main(){
     
    char a[100];
    gets(a); //boşluk girileceği için gets ile okuyourz, scanf çalışmaz
    for(int i = 0;i<100;i++)
      while(a[i]==' ')
        a[i]=a[i+1];
    printf("%s",a);
    }

    ilk yaklaşımdan farklı olarak ikincisinde boşluk görülünce dizginin (string) geri kalanındaki bütün elemanlar sola kaydırılmıştır. Bu işlem boşluk görüldükçe tekrar eder.

    Başarılar

  22. perihan

    hocamız şöyle bir çalışma sorusu verdi
    kullanıcıdan sayısal str okuyup okudugu str gecerli bir tamsayı ise taban belirleyecek(16'lık,8'lik,2'lik..)tabanı belirledikten sonra 10'luk tabana cevirecek, 10'luk tabanda sayı verildiğinde okunuşunu söyleyecek...
    çok uğraştım ama hatalar alıyorum bu programı acıklayarak anlatır mısınız

  23. Şadi Evren ŞEKER Article Author

    Sanırım aşağıdaki gibi bir kod ile işe başlayabiliriz. Verilen onluk tabandaki sayıyı verilen tabana çevirir (sizin istediğinizin tersi):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    int tabancevir(int n,int taban){
        int sonuc = 0;
        int basamak = 1;
        while(n>0){
                   sonuc+=(n%taban)*basamak;
                   basamak *=10;
                   n=n/taban;
        }   
        return sonuc;
    }

    Şimdi görüldüğü üzere, verilen sayı, verilen tabana bölünüp kalan değer basamak ile çarpılıyor ve basamak her seferinde 10 ile çarpılıp bir kaydırılıyor.

    Gelelelim sizin istediğiniz kısma. Hızlıca kodluyorum ve yukarıdaki işlemin tersini yapacak (yani verilen tabandan onluk sisteme çevirecek)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    #include <stdio.h>
    int tabancevir(int i,int taban){
            int carpan = 1;
            int toplam = 0;
            while(i>0){
                    toplam += (i%10)*carpan;
                    if(i%10>=taban){
                            printf(" bu sayi bu tabanda olmaz!! ");
                            break;
                    }
     
                    carpan *= taban;
                    i = i/10;
                    printf("%d,%d,%dn",i,carpan,toplam);
            }
            return toplam;
     
    }
    int main(){
            int i ;
            scanf("%d",&i);
            printf("sonuc-->%d",tabancevir(i,2));
            printf("sonuc-->%d",tabancevir(i,8));
    }

    Kod basitçe, carpan değerini birden başlatıp her dönüşte verilen taban ile çarpmaktadır. Yani taban 2 için 1 sonra 2 sonra 4 sonra 8 gibi üstleri elde eder. Ayrıca bu değerle o andaki verilen sayının son hanesini çarpar. Son haneyi almak için %10 kullanıyoruz. Ayrıca sayının son hanesi çalıştıktan sonra sayı bir hane kaydırılıyor ki bunun için de /10 kullanıyoruz. Örneğin yukarıdaki kodun çıktısı aşağıda:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    new-host-2:~ sadievrenseker$  vi taban.cpp
    new-host-2:~ sadievrenseker$ g++ taban.cpp
    new-host-2:~ sadievrenseker$ ./a.out
    1101
    110,2,1
    11,4,1
    1,8,5
    0,16,13
    sonuc-->13
    110,8,1
    11,64,1
    1,512,65
    0,4096,577
    sonuc-->577

    Kabaca 1101 için ikilik tabanda olması halinde onluk karşılığının 13 ve sekizlik tabanda olması halinde onluk karşılığının 577 olduğunu bulmuştur.

    Ayrıca aşağıdaki yazılardan faydalanabilirsiniz:

    http://www.bilgisayarkavramlari.com/2009/10/08/sayi-tabanlari-number-bases-2/
    http://www.bilgisayarkavramlari.com/2011/04/01/ondalikli-sayilarin-taban-donusumleri/

    Son olarak sorunuzda onaltılık tabandan bahsetmişsiniz, burada A,B,C,D,E harfleri sayı yerine kullanılır. Bu harfleri alıp karakter karakter incelerken karşılaşmanız durumunda çarpan olarak karşılığını dönüştürmeniz gerekiyor.

    Biraz uğraşın yine de tam çözümü yapamazsanız kodlar yayınlarım.

    Başarılar

  24. mehmet

    bir dizgi katarı içinden istediğimiz kelimeyi nasıl bulabiliriz?
    örneğin,geleceğimgelirsen dizgisi elimizde olsun biz bu dizgi içinden gel kelime sayılarını nasıl buluruz

  25. Şadi Evren ŞEKER Article Author

    Sorunuzun cevabı metin arama algoritmalarını kodlamak ile ilgili. Daha önce sitede yazıp yayınladığım algoritmalardan bazıları aşağıdaki şekildedir:

    Metin arama algoritmaları (bir yazı içerisinde belirli bir dizgiyi (string) arayan algoritmalar)

  26. mehmet

    merhaba Şadi hocam, benim aradığımda DFA metin arama algoritması sizin kodları inceledim fakat çalıştıramadım. ekrandan bir dizgi girilsin ve bu dizgi içinde istediğimiz kelimeyi sizin kodlarla bağlantı kurarak nasıl çalıştırırız(bu kodların kütüphaneleri nelerdir...)

  27. Şadi Evren ŞEKER Article Author

    Şayet bahsettiğiniz kod aşağıdaki adresteki ise:

    http://www.bilgisayarkavramlari.com/2009/11/24/dfa-metin-arama-algoritmasi-dfa-text-search/

    Bu kod pseudocode(müsvette) olarak yazılmıştır ve amacı sadece algoritmayı açıklamaktır. Sizin kodda bulunan DFA işlemleri ile ilgili fonksiyonları kodlamanız gerekir. Şayet bu alt fonksiyonları kodlarsanız algoritma başarılı bir şekilde çalışacaktır. Şayet bu alt fonksiyonlardan anlaşılmayan varsa ilgili yazının altında yorum olarak sormanız halinde yardımcı olmaya çalışırım.

    Başarılar

  28. mehmet

    ya hocam sizde rahatsız ediyom ama dfa algoritmasında baya alt fonksiyon var nasıl başlayacağımı hangisini nasıl yapacağımı anlayamadım

  29. Şadi Evren ŞEKER Article Author

    Bazı dillerin kendisi DFA özelliğindedir (örneğin PROLOG veya LISP) gibi diller bu şekilde kullanılabilir.

    Bazı diğer diller için ise bunu yapan hazır yazılımlar vardır. Örneğin JAVA veya C# için bunu yapan kütüphaneler (API) bulunmaktadır.

    Ancak sanırım siz C dilinde kodluyorsunuz. Bu durumda hazır bir kod bilmiyorum en güzeli kendinizin yazması. Birazdan basit bir DFA (veya otomat) kodu nasıl C ile kodlanır bunu içeren bir yazı eklemeye çalışacağım. Biraz detaylı olduğu için yeni bir yazı yazılması gerekiyor.

    Başarılar

    1. Esra

      Bir aracın otopark ücretinin hesaplanması.
      Araçların en fazla 24saat kaldığını varsayın.
      0-2:5tl
      2-8:10tl
      8-24:20tl
      Hocam bunun formunu acilen yazabilir misiniz lütfen 🙂

  30. merve

    merhaba hocam structk yapısıyla ilgili bir sorum olacaktı
    şimdi şadi hocam
    Uzayda iki boyuttaki x ve y noktaları vardır.
    a) iki noktadan geçen doğru denklemini ( y=mx+a ) bulan programı tasarlayınız.
    b) Elimizdeki noktalardan dikdörtgen temsili olusturacak programı tasarlayınız.
    c) İki dikdortgen kesişiyor mu? Kesişiyorsa kesişen alanı bulan programı tasarlayınız

    İpucu:

    .....
    struct point {
    int x;
    int y;
    };
    struct point p1, p2;
    p1.x=3;
    p1.y=5;
    p2.x=1;
    p2.y=-2;
    ....hocam yardımcı olursanız sevinirim

  31. hatice

    hocam benimde bir sorum olacaktı
    kişilerin adını tutan veri yapıları diye bi konudan bahsetti a
    struct perseon {
    char ad[30];
    int yas;
    };
    struct person baskan;,
    baskan.ad='ahmet';
    baskan.yas='50'

    struct person*baba;( baskanın babasının bilgisi)
    baskan.baba ->='mustafa';
    baskan.baba->yas=50;
    baskan.baba.baba->ad

    bizden bu kişinin çocuklarını tutacak olan programı istiyo.hiç çocuğu olmayabilir ya da çok sayida çocuğu olabilir
    yardımcı olur musunuz?

  32. handan says:

    merhaba hocam virgülden sonra kaç basamak yuvarlamak istiyorsak o kadar yuvarlayan fonksiyon nasıl yazılır.
    1)aşağı yuvarla;
    2)yukarı yuvarla;
    3)en yakınına yuvarlayan fonksiyonu yazınız.
    yardımcı olursanız sevinirim.

  33. gizem

    hocam merhaba izninizle sizin eski bir öğrenciniz olarak handan arkadaşımızın sorusuna cevap vererek hem ona hemde size yardımcı olmak isterim.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #include <stdio.h>
    int main(void)
    {
    	int sonuc;
    	float ondalikli,sayi;
    	printf("Lutfen sayinizi giriniz");
    	scanf("%f",&sayi);
    	ondalikli=sayi-(int)sayi;
    	if (ondalikli>=0.5)
    	{
    		sonuc=(int)sayi+1;
    	}
    	if (ondalikli<0.5)
    	{
    		sonuc=(int)sayi;
    	}
    	printf("En yakin sayiya yuvarlanmis sonucu =%dn",sonuc);	
    	printf("Yurakiya yuvarlanmis sonucu = %d n",(int)sayi+1);
    	printf("Asagiya yuvarlanmis sonucu = %d n",(int)sayi);
    }
  34. gizem

    Handan,Dizinin tersten sıralanmış hali kendisiyle aynı yani palindromsa true değilse false üreten programı yazınız sorunun cevabı;

    ?Download palindrome.c
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    #include <stdio.h>
    #include <stdlib.h>
     
    void ispalindrome(char* s){
         int i=0;int son;
         for (i=0;i<strlen(s);i++){
             if (s[i]==s[strlen(s)-i-1]){
                                         son=1;
             }
             else {
                  son=0;}
                  }
             if (son==1){
                         printf("ntrue");}
             else {
                  printf("nfalse");}
     
                  }
     
     
    int main(void){
        ispalindrome("radar");
        ispalindrome("kabak");
        ispalindrome("yimirta");
        getch();
    }

    umarım yardımcı olmuştur başarılar.

  35. handan says:

    teşkkür ederim gizem programda neden iki tane include kulandın ve kütüphanesini belirtmedin bide ikinci programdaki ilk if yapısının ne yaptığını anlamadım açıklama yaparsan sevinirim.

  36. handan says:

    merhaba hocam pointerla fonksiyon arasındaki ilişkiyle ilgili bir sorum olucaktı.
    örneğin elimizde bir merhaba stringi var fonksiyon yerel bir değişkenle set edilecek returnle değer döndürecek ana programda da merhabayı gösterecek program.
    yardımınızı bekliyorum salı günü sınavım var sorular içinde boğulurken tesadüfen bu siteyi buldum öğrencilere olan yardımınız çok güzel biz yeni başlayanlar için bize yardım edecek birilerine ihtiyacımız var.

  37. gizem

    Eklediğim koddaki include ların biri stdio.h diğeri ise stdlib.h bu kütüphanenin kullanılmasının sebebi strlen gibi hazır fonksiyonların kullanılabilmesi.
    ikinci if yapısı yani if (s[i]==s[strlen(s)-i-1]) bu satırda stringin uzunluğunu strlen ile okuyoruz ve kelime üzerinde bir eksilterek dolaşıp karşılaştırma yapıyoruz eğer karşılaştırdığımız harfler aynı ise true(palindromdur)diyoruz.

  38. cbasaranoglu Article Author

    Hakan Bey,5.sorunun C# Diline uyarlaması şu şekildedir.

    ?View Code CSHARP
     static int Boyut;
        static void Main(string[] args)
        {
          Console.WriteLine("Matrisin Boyutunu Giriniz:");
          Boyut =Convert.ToInt32( Console.ReadLine());
          for (int i = 1; i <= Boyut; i++)
          {
            for (int j = 1; j <= Boyut; j++)
            {
              int a = Boyut - i + 1;
              int b = Boyut - j + 1;
     
              Console.WriteLine(Minimum(i, j, a, b));
              Console.ReadLine();
     
            }
          }
     
        }

    Fonksiyonu yazmadım.Fonksiyonu yazıp çalıştırabilirsiniz.Eğer bir sorunuz olursa tekrar paylaşınız

  39. Şadi Evren ŞEKER Article Author

    Cem Beyin de belirttiği üzere (kendisine buradan teşekkürü bir borç bilirim) fonksiyonu aynen C# dilinde yazabilirsiniz. Bu sorunun çözümünde verilen fonksiyon C#, JAVA, C++ veya C dillerinde aynıdır, bir değişiklik yapılmadan aynen diğer dillerde yazılabilir. Şayet bir hata alıyorsanız hata mesajınızı yazmanız durumunda yardımcı olmaya çalışalım.

  40. Hakan

    sorunun çözümünde int min parantezinin içindeki int tanımlamalarını c# kabul etmiyo.
    lütfen çalışır halini (programın tamamını)yazar mısınız..

  41. Şadi Evren ŞEKER Article Author

    ne yazık ki şu anda csharp kurulu bilgisayar elimin altında yok. Ancak tahminen csharp min kelimesini beğenmiyor olabilir, belki reserved keyworddür. o yüzden farklı bir isim vermekte yarar var. Kabaca aşağıdaki şekilde olacak, deneyerek çalıştırın ve aldığınız hatayı yazın yardımcı olmaya çalışayım.

    ?View Code CSHARP
    int asg(int a,int b,int c,int d){
      if(a<b&&a<c&&a<d)
        return a;
      if(b<a&&b<c&&b<d)
        return b;
      if(c<a&&c<b&&c<d)
        return c;
      return d;
    }

    Yukarıdaki şekilde çalışması gerekir. Çok temel bir fonksiyon ama belki dediğim gibi gözden kaçan bir nokta vardır. Vakit bulursam windows yüklü bir bilgisayar bulup sizin için test ederim ama bu vakte kadar siz de yukarıdaki şekilde yazıp deneyebilirsiniz. Yine de acil gerekiyorsa, aldığınız hatayı yazmanız halinde yardımcı olmaya çalışırım.

    Başarılar

  42. Hakan

    hocam yukarıda cem beyin yazdığı for döngülerinin içindekiler for (int i = 1; i <= Boyut; i++)
    i <= olan kısım ne tam olarak ?
    yazımda hata mı var acaba ?
    bir de bu int içinde int hangi konuya ait oluyor ?
    teşekkürler.

  43. Hakan

    hocam yazdıklarını denedim..

    c ve d nin altını çiziyo.

    şu satırda :
    Console.WriteLine(asg(a,b,c,d));
    Console.ReadLine();

  44. Şadi Evren ŞEKER Article Author

    Hakan Bey;

    Sanırım temel konular ile ilgili eksiğiniz bulunuyor. Öncelikle döngü yazmayı ve kontrol koşulları yazmayı öğrenmeniz gerekir.

    Cem Beyin yazdığı kısımda bulunan i< = ifadesi, döngü değişkeni olan i değişkeninin verilen Boyut değişkeninden küçük veya eşit olduğu sürece döneceği anlamına gelir. Aşağıdaki yazılara bakmanızda yarar olabilir: http://www.bilgisayarkavramlari.com/2009/11/11/c-dilinde-dongu-ornekleri/
    http://www.bilgisayarkavramlari.com/2009/11/02/ic-ice-donguler-nested-loops/

  45. Hakan

    Şadi hocam teşekkürler.

    Yalnız orda <= ifadesi yukarıda başka karakterler görünüyor da.
    Mesajı gönderince düzgün göründü.
    <= ifadesi &;= olarak görünüyor yukarıda.

  46. Hakan

    Hocam şöyle yazdım;

    ?View Code CSHARP
      class Program
        {
            static int Boyut;
            int asg(int a, int b, int c, int d)
            {
                if (a < b && a < c && a < d)
                    return a;
                if (b < a && b < c && b < d)
                    return b;
                if (c < a && c < b && c < d)
                    return c;
                if (d<=a && d<=b && d<=c)
                return d;
            }
     
        static void Main(string[] args)
        {
          Console.WriteLine("Matrisin Boyutunu Giriniz:");
          Boyut =Convert.ToInt32( Console.ReadLine());
          for (int i = 1; i <= Boyut; i++)
          {
            for (int j = 1; j <= Boyut; j++)
            {
              int a = Boyut - i + 1;
              int b = Boyut - j + 1;
     
              Console.WriteLine(asg(i,j,a,b));
                  Console.ReadLine();
     
            }
          }
     
        }

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

    2 tane hata verdi.

    Error 2 An object reference is required for the non-static field, method, or property 'ConsoleApplication8.Program.asg(int, int, int, int)'

    Error 1 'ConsoleApplication8.Program.asg(int, int, int, int)': not all code paths return a value

  47. cbasaranoglu Article Author

    İyi Günler Hakan Bey öncelikle fonksiyonu public static int asg(int a,int b,int c,int d){}; olarak tanımlamanız gerek.Böyle bir tanımlama yapmamızın nedeni public static terimi ile fonksiyonu kullanabilmek ikinci olarak bir adet else komutu eklemeniz gerekmekteki kodun dallanabileceği her hangi bir yerden mutlaka bir dönüş değeri olsun yani;
    if (a < b && a < c && a < d)
    return a;
    else if (b < a && b < c && b < d)
    return b;
    else if (c < a && c < b && c < d)
    return c;
    else
    return d;
    şeklinde.
    umarım faydası olur iyi günler

  48. Hakan

    Değiştirdim dediğiniz şekilde.
    Ama yine sorun var.Hata çıkmadı ama doğru çalışmıyor program.

    51111
    14221
    12321
    14221
    51111

    olarak çıktı veriyor.Aslında çıktılarda bu şekilde değil.
    hepsini alt alta yazıyor.ben bu not defterinde böyle yazdım.
    4 ler 5 ler hatalı.onun dışında doğru çalışıyor.

  49. cbasaranoglu Article Author

    İyi günler hakan bey programın tam kodunu atıyorum sanırım bir yerlerde yanlışlık yapıyorsunuz

    ?View Code CSHARP
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    
     
    namespace ConsoleApplication2
    {
      class Program
      {
        static int Min(int a, int b, int c, int d)
        {
          if (a <= b && a <= c && a <= d)
            return a;
          else if (b <= a && b <= c && b <= d)
            return b;
          else if (c <= a && c <= b && c <= d)
            return c;
          else
            return d;
        }
        static int Boyut = 0;
        static void Main(string[] args)
        {
          Console.WriteLine("Matrisin Boyutunu Giriniz:");
     
          Boyut = Convert.ToInt32(Console.ReadLine());
          for (int i = 1; i <= Boyut; i++)
          {
            for (int j = 1; j <= Boyut; j++)
            {
              int a = Boyut - i + 1;
              int b = Boyut - j + 1;
              Console.WriteLine(Min(i, j, a, b));
     
     
            }
            Console.WriteLine("n");
     
          }
          Console.ReadLine();
        }
      }
    }

    Not:Yanyana yazdırmıyor fakat işlemler doğru 8 yazıp kontrol edebilirsiniz.

  50. erkan

    merhaba hocam c program sorusu var yardimci olursaniz sevinirim.
    bir salyangoz v metre yukseklige tirmanmak istemektedir. bir gunde a metre yukari cikiyor aksamlari ise b metre asagi kayiyor. buna gore en uste cikmasi icin kac gune ihtuyaci olmasi gerektigini bulan program yaziniz.
    ornek
    girdi=2 1 5 cikti=4

  51. erkan

    hocam farkettiyseniz sizin islema gore 2 1 5 girdileri icin cevap 5 cikiyor cevap 4 olmasi lazim. yani salyangoz 4. gun 5 metreye ulasiyor 1 metre geriye gitmesi mantiksiz olur.

  52. Şadi Evren ŞEKER Article Author

    Şu halde, her durumda son gün geri gitmeyecek kabul ediyorsak işlemden 1 gün çıkarmanız gerekir.

    v/(a-b) - 1

    olacaktır. Şayet ondalıklı sayıları da işin içine katmak isterseniz o zaman da bu formülü yukarı yuvarlamanız gerekir (tavan, ceiling).

    ceil(v/(a-b) - 1)

    Başarılar

  53. Şadi Evren ŞEKER Article Author

    5 1 6 için hata nedir? Kusurlu bir sayı çıkıyor yani bittiği gün tam ulaşmıyor durumu ilk sorunuzda yoktu. Bu durumda size verdiğim ilk formül değil ikinciyi kullanmak gerekiyor, zaten ilk formül tam sayı durumunda hep doğru çalışıyor.

    ikinci formülü çok test edemedim sanırım oradaki -1 hata sebebi oluyor onu kaldırısak da çalışıyor? Yani aşağıdaki şekilde:

    ceil(v/(a-b))

    Sizin örneğinizde ceil(6/4) = ceil(1,25) = 2 olacak zaten 5 1 6 işleminde sonuç da 2 çıkmalı (ilk gün 4 gidiyor sonraki gün bitiyor)

    Soru ile ilgili sorun şu, soru ilk başta iterasyon sorusu gibi sorulmuş yani sanki döngü konusu hedeflenmiş ama sorunun çözümü her durumda bir işlem ile mümkün yani basit bir scanf printf ile ve belki bir tane de if kontrolü ile çözülebilir. Bilmiyorum belki son yazdığım işlemde de hata olabilir ama biraz uğraşın ve eminim tek bir işlem ile sonucu bulacaksınız. Soruda iki kritik nokta var birisi formül diğeri son gün, formül için sanırım son yazdığım çalışaak, son gün için ise if kontrolü yapıp -1 çıkarmanız gerekebilir hepsi bu. Siz son haline bir bakın, formülü ve koşulu gerekiyorsa güncelleyin, yine başka örneklerde hata veriyorsa buraya yazın onlara da bakar formülü güncelleriz.

    Başarılar

  54. mahmut yüksel

    * Girilen üç sayıdan en büyüğünü bulan algoritmayı yazınız.
    * Tamsayılarda üs alma işlemini gerçekleştiren algoritmayı yazınız ( ab ).
    * 1-100 arasında tutulan bir sayıyı tahmin eden algoritmayı yazınız.
    hocam bu üç sorunun cevabını alabilirmiyim acilen lazım şimdiden tşk ederim ( ben daha yeniyim ve ödev verdi hocamız kaç gündür ugraşıyorm ama yapamadım )

  55. Serdar Evleksiz

    Klavyeden girilen 10’luk tabandaki bir tamsayıyı 2’lik tabana çeviren ve ekrana yazan ve aşağıdaki örnek çıktıya uygun
    Algoritma adımlarını yazınız

  56. merve

    merhabalar bir sorum olacaktı.umarım çabuk cevap verebilirsiniz.örnek çıktısını yazıyorum ve fonksiyonlarla çözülmesi gereken bir soru.şimdiden teşekkür ederim.

    153 1'n küpü+5'n küpü+3'n küpü=153 narsist sayıdır
    1634 1'n dördüncü kuvveti+6'nın dördüncü kuvveti+3'n dördüncü kuvveti+4'n dördüncü kuvveti=1634 narsist sayıdır

  57. ahmet

    hocam mrb rahatsız edıyorum ama bu soru benm ıcın cok önemli acaba sorumu acıklarmısınız cok ihtiyacım var bu soruya birmiliyondan küçük sayıları okuyup yazdıran programı yanıtlaya bilirmisiniz lütfen

  58. Ali

    hocam yukarda bi string içindeki boşlukları silen kodda hata var belirteyim dedim belki üstünden geçen arkadaşlar olur. dalgınlığınıza gelmiş sanırım kaydırmayı yanlış kodlamışsınız 🙂

    #include 
     
     
    int main(){
     
    char a[100];
    gets(a); //boşluk girileceği için gets ile okuyourz, scanf çalışmaz
    for(int i = 0;i<100;i++)
      while(a[i]=' ')
        a[i]=a[i+1];
    printf("%s",a);
    }
  59. Fatih durak

    hocam merhaba ben elektrık elektronık 1. sınıf ogrencısıyım proglamlama ve meslekı yazılım dersımızden haftaya sınavımız var sıze 3. sorum olacak yardımcı olursanız cok sevınırım.
    1.sorum bankaların ınternet sıtesının calısma prensıbı gırdıgımız 6 hanelı banka numaramızın basamak sayılarına gore 1 ve 2 ile çarparak topluyor bu ıslemı yaparken 6 hanelı numaramızın 1 ler basamagındakı rakam dahıl edılmıyor eger buldugu sonucun son rakamıyla bızım banka hesap numaramızın son rakamı uyusuyorsa sıfre dogrudur degılse sıfreyı kontrol edınız.

    2. sorum x-x(kare)/2+x(küp)/3-x(üzeri 4)/4....... bu dızı ıslemını yapan bır program yazınız

    3. sorumsa bır sayı gırınız bu sayının asal olup olmadını kontrol eden bır program yazınız eger 0 gırılırse program sonlanacak. sorularım bunlar yardımcı olursanız gercekten cok sevınırım hocam. sımdıden tesekkur ederım

  60. Sıla

    klavyeden 2 nokta girilmesi isteniyor ve bu iki noktadan bir doğru geçip geçemeyeceği sorgulanmalı ve eğer doğru geçebiliyorsa bu doğrunun denklemini yazdırmalı. Noktalar aynı olmadığı sürece her iki noktadan doğru geçebilir .if kullanarak noktalar birbirine eşit değilken denklem yazdırabilirz fakat bu durumda iki boyutlu array kullanmalıyız sanırım. mesela array[i][j] şeklnde klavyeden isteyeblrz ama bu durumda if in içinde karşılaştrmayı nasıl yapacağz? while ile de yapabilirz aynı işlemi sanırım. fakat karşılaştırma olayı nasıl olacak? yardmcı olursanız sevinirim

  61. sevda

    x-x^2/2!+x^3/3!-x^4/4!+...+x^n/n! bunun c dilinde yazılması isteniyor.(fonksiyon yardımıyla) n dısarıdan girilecek yardımcı olursanız gerçekten cok sevinirim.

  62. Şadi Evren ŞEKER Article Author

    Öncelikle sayıyı nasıl okuyacağımız sorunu var. Bunun için dizgiler (string) kullanılabilir.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    #include <stdio.h>
     
    int main(){
       printf("ilk sayiyi giriniz");
       char [100] ilksayi;
       char [100] ikincisayi;
       scanf("%s",ilksayi);
       printf("ikinci sayiyi giriniz");
       scanf("%s",ikincisayi);
    }

    Yukarıdaki kodda, basitçe iki dizgi (String) tanımlayarak bunların içerisine klavyeden girilen sayıları okuduk. Şimdi bu sayıları toplamaya başlayabiliriz. Ancak dikkat edilecek husus sayıların boyutları kadar toplamaktır. Bir de sayıların toplanması sırasında elde var (carry) değeri oluşacak. Bu değerin bir sonraki haneye atılması gerekir. Aslında bu işlem toplanırken yapılabilir yani tek geçişte çalıştırmak mümkün ama ben biraz kolaya kaçıp (emin olun burada yazarak anlatmaya kalksam çok karışacak) toplamak için bir döngü ve sonra da bu elde var değerleri için ikinci bir döngü yazacağım. Önce toplamayı yapalım:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    #include <stdio.h>
     
    int main(){
       printf("ilk sayiyi giriniz");
       char [100] ilksayi;
       char [100] ikincisayi;
       scanf("%s",ilksayi);
       printf("ikinci sayiyi giriniz");
       scanf("%s",ikincisayi);
     
       for(int i =0;i<100;i++){
           ilksayi[i]+=ikincisayi[i];
       }
     
     
    }

    Yukarıda herhane kendi değeri ile toplandı. Şimdi elde var değerleri ile uğraşabiliriz. Ancak bundan hemen önce ascii tablosuna bir göz atmamız gerekiyor.

    http://www.bilgisayarkavramlari.com/2009/09/04/ascii-tablosu/

    Görüleceği üzere, sayı değerleri 48 ile 57 arasındadır. Yani 48 ascii değeri aslında 0, 57 ise 9 sayısı olarak kabul edilmektedir.

    Şimdiki toplama işleminden sonra bazı değerler 57'den büyük olacaktır. Yapmamız gereken işlem basitçe mod ve bölümdür.

    Anlaşılması için örnek üzerinden anlatayım. Mesela toplanan iki değer 9+9 olsun. Bu durumda ascii değerleri 57 + 57 olacaktır. Yani toplam 114 olacaktır. Bizim yapacağımız ise sayının 57 üzerinde olması halinde sayıyı düzeltmektir çünkü bu sayılar ascii tablosunda rakama karşılık gelmez. Örneğin üzerinden gidecek olursak 114, r harfine karşılık gelir ki bunun toplamada bir anlamı yoktur.

    Çözüm olarak sayıyı önce 58'e bölüyoruz çıkan sonuç elde var değeridir. Yani 114/58 = 1 olacağı için elde var 1 diyebiliriz. Bu değer bir yandaki haneye eklenecek bunu bir kenarda tutalım. Şu anda uğraştığımız hanenin değeri ise mod ile bulunur. 114 % 58 = 56 olacaktır. Gerçekten de 56 değeri ascii tablosunda 8 rakamına karşılık gelmektedir. O halde bu haneye 56 yazıp yan haneye 1 ekliyoruz (aslında 1 değil de 1 + 48 çünkü ascii çevirimi yapılmalı). Ancak ben basit olsun diye sayıları önce onluk tabana çevirip sonra toplama işlemi yapacağım. Kısaca %48 alınınca sayılar 0 ile 10 arasındaki değerlerine düşerler. Burada toplama yapıp çıkan sonucu tekrar ascii karşılığına çevirelim.

    Kodu revize edecek olursak:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    #include <stdio.h>
     
    int main(){
       printf("ilk sayiyi giriniz");
       char [100] ilksayi;
       char [100] ikincisayi;
       scanf("%s",ilksayi);
       printf("ikinci sayiyi giriniz");
       scanf("%s",ikincisayi);
     
       for(int i =0;i<100;i++){
           ilksayi[i]+=ikincisayi[i];
       }
     
       for(int i = 0;i<100;i++){
           ilksayi[i]=ikincisayi[i]%48+ilksayi[i]%48;
     
           ilksayi[i-1] += ilksayi[i]/10;
           ilksayi[i] = ilksayi[i]%10;
           ilksayi[i]+= 48;
       }
     
     
       printf("%s",ilksayi);
     
    }

    Görüldüğü üzere ilksayi ve ikincisayi değişkenlerindeki değerleri topluyoruz, sonuçta çıkan değerin 10'a bölümünü ise bir sonraki haneye ilave ediyoruz. Şayet sayı 0 ile 10 arasındaysa zaten bölüm 0 olacağı için eklenecek birşey yok demektir. Ayrıca %10 ile de kalan haneyi tutuyoruz.

    Son olarak da sayıya 48 ilave ederek sayının değerini ascii tablosunda anlamlı bir hale getiriyoruz.

    Buraya kadar herşeyi anladıysak yeni bir problemimiz daha var onu da çözelim. Şimdiye kadar hep dizgileri kullandık ama dizginin ekrana basılması için dizgi sonu (end of string) karakteri önemlidir. Bu karakter şeklinde gösterilir ve şayet bu karakteri bozarsak yanlış bir şekilde ekrana dizginin hiç işlenmeyen karakterleri de basılır. Bunu engellemek için dizgimizin boyutunu ilk başta hesaplayıp ancak bu kadar karakter basılmasını sağlamalıyız.

    Dizgi boyutu için string.h kütüphanesinden strlen fonksiyonunu kullanacağım.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    #include <string.h>
    #include <stdio.h>
     
    int main(){
       printf("ilk sayiyi giriniz");
       char  ilksayi [100] ;
       char  ikincisayi [100] ;
       scanf("%s",ilksayi);
       printf("ikinci sayiyi giriniz");
       scanf("%s",ikincisayi);
     
       int uzunluk = strlen(ilksayi);
     
     
       for(int i = 0;i<100;i++){
           ilksayi[i]=(ikincisayi[i]%48)+(ilksayi[i]%48);
     
           ilksayi[i-1] += ilksayi[i]/10;
           ilksayi[i] = ilksayi[i]%10;
           ilksayi[i]+= 48;
       }
     
       ilksayi[uzunluk] = '';
     
       printf("%s",ilksayi);
     
    }

    Kodun 12. satırında uzunluğu hesaplayarak, 23. satırında bu uzunluk değerindeki karakteri olarak atıyoruz. Bu durumda toplama işlemi sırasında dizgi sonu (end of string) karakterini yanlışlıkla bozarsak geri düzeltmiş oluyoruz.

    ses3:ecm sadievrenseker$ g++ tttopla.c 
    ses3:ecm sadievrenseker$ ./a.out
    ilk sayiyi giriniz123994
    ikinci sayiyi giriniz123994
    247988ses3:ecm sadievrenseker$

    Görüldüğü üzere toplama işlemimiz başarılı bir şekilde sonlanmaktadır. Ben sorunuza cevap vermeyi burada kesiyorum. Ancak koda, sınır durum kontrollerinin (boundary conditions) eklenmesi ve ayrıca uzunluğu farklı sayılar için de kontroller eklenmesi gerekir. Sanırım mantığını anlatmak için buraya kadar olan kısmı yeterlidir.

    Başarılar

  63. mikail

    1-)Bir cümlede gecen rakamların toplamını bulan program..!
    //bügün 15 mart 2013 Cuma 1+5+2+0+1+3=?
    2-)klavyeden istenilen sayıda telefon numarası gırılıyor 505 ile başlayan telefonların listesini ekrana yazan program
    3-)sayılardan bir oluşan bir dizinin içersindeki tek sayıları yeni bir teksayılar dizisine, cift sayıları yeni bir cift sayılar dizisine aktarıp
    Ekranda listeleyen program.
    hocam şu soruların cevaplarını bulursanız cok sevinirim.

  64. nurdan

    benm bı ödevm vardı acaba yardmcı olurmusunuz bir türlü yapamadım

    bir dizideki asal sayıları başka bir diziye atayan sınıf yapısı (üye fonksiyon zorunlu )
    c++ da

  65. Şadi Evren ŞEKER Article Author

    Arkadaşlar, ödev veya ödev olması muhtemel soruları, site üzerinde sorulduktan en az 3-4 ay sonra cevaplıyorum. Bunun sebebi bu sitenin veya herhangi başka bir sitenin, sizin gelişiminiz için size verilen ödevleri çözdürme yeri olmamasıdır.

    Size verilen ödevleri çözerek sitede yayınlamak bana hiçbirşey kazandırmayacağı gibi sizlere çok şeyi kaybettirebilir.

    Ancak, ödevinde belirli bir yere gelmiş, gerçekten emek harcayarak takıldığı yeri soran, çeşitli imkansızlıklar dolayısıyla kimseden yardım bulamamış sorulara yardım etmeye çalışıyorum. Kaynak isteyenlere kaynak göstermeye, kodunda problem yaşayanlara yardım etmeye çalışıyorum.

    Bu mesajı sizlerin soruları üzerine yazdım ancak genel bir durum. Sizlerin durumunuzda şayet çalışmalarınızı ve takıldığınız yerleri yollarsanız, takıldığınız noktadan bir adım ileriye gitmenize seve seve yardımcı olurum. Şayet çözümü konusunda sorularınız varsa, bu durumda da ileride bana hatırlatmanız halinde çözerek bu soruların cevaplarını yayınlarım.

    Dikkat edilmesi gereken diğer bir husus da (sizin durumunuz ile ilgili değil ama genelde yaşanması muhtemel olduğu için), bu ödev ve projeleri veren öğretim üyelerinin tasarrufudur. Bu sitedeki çözümler sadece beni bağlar ve kişisel yorumlarımdan ibarettir. Herhangi bir şekilde, herhangi bir dersteki notunuz, öğretim üyesinin değerlendirmesine itirazda temel teşkil etmesi uygun değildir. Her ders ve her notlama kendi içerisinde ilgili öğretim üyesi veya asistan tarafından değerlendirilir.

    Sorularınızı ileride cevaplandırma üzere kaydettim, dönem sonunda sırasıyla daha önceki soruları cevapladığım gibi sizin sorularınızı da cevaplayacağım.

    Emin olun, bu siteyi yaparken de, ödevlerinizi ve projelerinizi tarihinden önce çözmeyerek de sizlerin iyiliğinizi düşünüyorum.

    Başarılar

  66. nurdan

    EN AZINDAN NASIL YAPACAGIM HAKKINDA FİKİR VEREBİLİRMİSİNİZ KENDİM YAPMAK İSTİYORUM DA EN AZINDAN DİZİYİ NASIL oluşturabilirim sınıf yapısında

  67. Şadi Evren ŞEKER Article Author

    Tabi, hemen cevap verelim.

    Nesne dizilerinin anlatıldığı yazı aşağıda:

    http://www.bilgisayarkavramlari.com/2012/03/14/object-array-nesne-dizisi/

    Ayrıca C++ diliyle nesne dizilerinin kullanımına güzel bir örnek, aşağıdaki soru çözümünde yer alıyor:

    http://www.bilgisayarkavramlari.com/2010/12/07/nesne-yonelimli-programlama-dersi-quiz-cozumu/

    Ayrıca asal sayıların bulunması ile ilgili kod bu sayfada, yukarıdaki yorumlar arasında yer alıyor.

    Bunlara bakın, sorunuzu çözmek için yeterli bilgiyi içeriyorlar. Yine de takıldığınız bir yer olursa sorabilirsiniz, yardımcı olmaya çalışırım. Ancak sormadan önce biraz kodlama denemenizde yarar var. Mesela bu yazılardaki kodları yazıp nasıl çalıştıklarını anlayıp birbiri ile entegre etmek güzel bir başlangıç olabilir.

    Başarılar

  68. Yasin Okkaoğlu

    Hocam bende istatistik öğrencisiyim verilen bir matrisin 1/2 üssünü veren program ı for döngüsüyle nasıl yazabiliriz

  69. Şadi Evren ŞEKER Article Author

    Şimdi bu soru biraz dikkat gerektiriyor. 1/2 üssü demek aslında karekökü demek. Amacınız matrisin çarpanlara ayrılması doğru mudur? Yani A = B x B şeklinde A matrisinin iki adet eşit matrisin çarpımı şeklinde yazmak istiyorsunuz anladığım kadarıyla?

    Bunun için farklı yöntemler bulunuyor, köşegenleştirme (diagonalization) veya jordan decompositon (jordan ayrıştırması) veya denman-beavers iterasyonu veya newton yöntemi gibi yöntemler kullanılabilir.

    Vakit bulursam yöntemlerin detaylarını ve nasıl çalıştıklarını ayrıca bir yazıda açıklamaya çalışırım. Yine de kodlamada takıldığınız noktalar olursa ve bunları sorarsanız sanırım daha hızlı yardımcı olabilirim.

    Başarılar

  70. ebru yazıcı

    ya arkadaşları 24 haneli bir sayının 3 er 3 er ayırarak okunuşunu bulan c++ kodunu nasıl yazabilirz :/ bana yardım edebilecek olan varmı diziler kullanarak yapmak istiyorum./

  71. elif

    klavyeden girilen en fazla 24 haneli sayını okunuşunu ekrana yazdıran c++ prog.için yardımcı olur musunuz lütfen çok acil

  72. Büşra Çalışkancı

    Hocam istatistik öğrencisiyim vizeye çalışıyorum 1 sorunun çözümü yok bana yardımcı olabilir misiniz ?
    soru şöyle : θ=3 olan üstel dağılımdan 200 tane sayı üretip ürettigi sayıları kücükten büyüğe sıralayan program nasıl oluyo ?
    -log(1-i/n+1)=bx(i)+εi modelinin parametresini tahmin ediniz diye devam ediyor soru yardımcı olursanız sevinirim hocam

  73. Anonim

    merhaba hocam,getch() fonksiyonunu kullanmadan kullanıcının girdiği karakteri entersız nasıl okuyabiliriz..

  74. Serdar YALÇİN

    Hocam bir ödevim var.Ama bu ödev C # 'da konsol uygulamasından yapılacak.Soru şu hocam : 5 sayının ortancasını bulan C# programı.Hocam lütfen yardımcı olur musunuz?

  75. hüseyin kara

    iyi günler kafama takılan bir sorum vardı. Tamsayılardan oluşan n elemanlı bir dizinin en büyük değeri ile en küçük değerini ekranda yazdıran kodu pointer kullanarak yazınız.en buyuk ve en küçük elemanı bulduruyorum ama pointerla nasıl yapabilir ki?

  76. yeşim

    arkadaşlar bana yardımcı olabilir misiniz ? Klavyeden girilen bir 4x4'lük matrisin diagonal elemanlarının toplamlarını ve aritmetik ortalamalarını bulup ekrana yazdıran programı yazınız. bu program hakkında.( şimdi iç içe iki for döngüsü kuruyorsun; en içteki döngüde i ve j'nin eşit olduğu durumlarda ilgili dizi elemanını toplam diye bir değişken üzerinden toplayıp gidiyorsun ) bu şekilde yapılacakmış..

  77. busra

    hocam benim de sorum şu: text file oluşturulurak kullanıcıdan alınan textin içeriğindeki her harften kaç tane olduğunu ve en çok frekansa sahip olanın en başta sergilendiği programı yazabilir miyiz?

  78. cagla

    merhaba arkadaşlar bu soruda bana yardımcı olur musunuz ? “Sinif” isminde bir fonksiyon yazın. Bu fonksiyon bir öğrencinin ortalama notunu alsın ve bu not 90-100 arasında ise 4, 80-89 arasında ise 3, 70-79 arasında ise 2, 60-69 arasında ise 1 ve 60'ın altında ise 0 döndürsün.

  79. Berk

    1) klavyeden arka arkaya sayılar girilecek her girilen sayı enter ile onaylanacak girilen sayıların toplamı 2000 ulaştığında program duracak ve girilen sayı adedini,sayıların toplamını ve ortalamasını hespalayacak program (while döngüsüyle yapılışı)

    2) klavyeden bir cümle girilecek noktaya basıldığı an algılancak ve girilen cümle ekranda gösterilecek program

    3) klavyeden 0 basılıncaya kadar sayı girilecek 0 basıldığında duracak program

    Yardımcı olurmusunuz çok acil lütfen.

  80. Beyza

    Hocam 5.soruda verdiğiniz bir string içindeki en uzun kelimeyi bulmayı kodlamışsınız, ben en kısa kelimeyi bulmak için uğraştım ama sorunlar çıktı anlatabilir misiniz?

  81. Tamer

    verilen bir tamsayının 1 ve kendisi dışındaki çarpanlarını görüntüleyen programın algoritması ve akış diyagramı ??

  82. Şeyma

    Merhabalar hocam benim bir sorum var 2boyutlu dizide kare sifreleme yapmam gerekli. Bu
    şifreleme yönteminde şifrelenecek metin içerisindeki boşluklar çıkarılarak soldan
    sağa doğru bir dikdörtgen içerisine yerleştirilecek ve daha sonra bu dikdörtgen
    içerisindeki metinler yukarıdan aşağıya doğru yazılarak şifrelenmek istenen metin
    şifrelenmiş olup bunu ekrana yazdırmak gerekiyor. ben aslında koda başladım ama kod çıktısını alamıyorum yardımcı olursanız çok sevinirim. Yazdığım kod :

    #include <iostream>
    using namespace std;
     
    int main()
    {
        int n,m;
        do
        {
            cin >> n >> m;
        }while(n>100 || m>100);
        string dizi[n][m];
     
        for(int i=0; i<n; i++)
        {
            for(int j=0; j> dizi[i][j];
        }//for
        for(int j=0; j<m; j++)
        {
            for(int i=0; i<n; i++)
                cout << dizi[i][j];
        cout << " ";
        }//for
    return 0;
    }
  83. Şadi Evren ŞEKERŞadi Evren ŞEKER

    Serdar Bey 5 Sayının ortancasını bulan kodu sormuş. Ortanca (median) basitçe bir dizi sıralandıktan sonra ortada kalan sayıdır. Bunun için sıralama algoritmalarından birisini kullanarak ortadaki elemanı bastırmak yeterlidir. 5 sayı olduğu biliniyorsa çözüm 3. elemanı yani dizinin 2. indesindeki değeri bastırmaktır. Sayıların sıralanması için aşağıdaki yazıya bakabilirsiniz:

    http://bilgisayarkavramlari.sadievrenseker.com/2008/08/09/siralama-algoritmalari-sorting-algorithms/

  84. Şadi Evren ŞEKERŞadi Evren ŞEKER

    Hüseyin bey şu soruyu sormuş:
    "Tamsayılardan oluşan n elemanlı bir dizinin en büyük değeri ile en küçük değerini ekranda yazdıran kodu pointer kullanarak yazınız"

    Bu tip sorulardaki amaç sizin pointer kullanma yeteneklerinizi geliştirmektir. Öncelikle aşağıdaki yazıya bakabilirsiniz:

    http://bilgisayarkavramlari.sadievrenseker.com/2007/10/16/pointer-gosterici-2/

    En küçük ve en büyük sayıları bulmak için aşağıdaki şekilde bir kod yazılabilir. Ben en büyüğü bulan kodu yazıyorum bunu basitçe en küçüğe siz çevirebilirsiniz.

    #include <stdio.h>
     
    int main()
    {
        int a[11]={1,5,3,2,8,7,6,0,11,13,9};
        int *eB=a;
        int *iter=a;
        while(iter<a+10){
           iter++;
           if(*iter>*eB)
              eB=iter;
          }
        printf("en büyük değer: %d",*eB);
    }

    Kodu derleyip deneyemedim ama çalışması gerekir diye düşünüyorum.

  85. Şadi Evren ŞEKERŞadi Evren ŞEKER

    Yeşim Hanım şu soruyu sormuş:klavyeden girilen bir 4x4'lük matrisin diagonal elemanlarının toplamlarını ve aritmetik ortalamalarını bulup ekrana yazdıran programı yazınız.

    Şablon olarak derslerde anlatıldığı için 2 boyutlu matrislerin bütün elemanlarını gezen kodu yazıp, istenen işlemi yapan kodu iç içe (nested) döngüye yerleştiriyorum. (sorunun açıklamasında buna benzer bir ibare vardı).

    #include <stdio.h>
     
    int main()
    {
      int a[4][4]={{1,2,3,4},{2,3,4,5},{6,5,4,3},{2,3,5,5}};
      int toplam=0;
      for(int i =0;i<4;i++)
        for(int j=0;j<4;j++)
           if(i==j)
             toplam += a[i][j];
      printf("toplam : %d",toplam);
      printf("ortalama : %d",toplam/4);
    }

    veya alternatif olarak aşağıdaki şekilde yazılması daha doğrudur.

    #include <stdio.h>
     
    int main()
    {
      int a[4][4]={{1,2,3,4},{2,3,4,5},{6,5,4,3},{2,3,5,5}};
      int toplam=0;
      for(int i =0;i<4;i++)
        toplam += a[i][i];
      printf("toplam : %d",toplam);
      printf("ortalama : %d",toplam/4);
    }

    Kodları derleyip deneyemedim ama çalışması gerekir diye düşünüyorum.

  86. Şadi Evren ŞEKERŞadi Evren ŞEKER

    Buşra Hanım şu soruyu sormuş:
    text file oluşturulurak kullanıcıdan alınan textin içeriğindeki her harften kaç tane olduğunu ve en çok frekansa sahip olanın en başta sergilendiği programı yazabilir miyiz?

    Sorunuz aslında tam olarak şifreleme konusu altındaki frekans saldırısına (veya frekans analizine) işaret ediyor. Bu konu başlığına aşağıdaki bağlantıdan ulaşabilirsiniz. Yazıda kod yoktu birazdan frekans analizi için bir kod yazıp ilgili yazıya eklerim:

    Veri Güvenliğinde Frekans Analizi (cryptoanalysis)

  87. Şadi Evren ŞEKERŞadi Evren ŞEKER

    Evet kısaca sorulan sorulara cevap yazmaya çalışıyorum. Ancak genelde soruların ödev, proje gibi not karşılığı olma ihtimaline karşılık üzerinden berlili bir süre geçmesini bekliyorum. Yukarıdaki sorulardan geçen ay sorulan sorulara kadar çözümlerini yazıp sitede yayınladım, yeni soruların biraz daha beklemesi gerekecek, yine vakit bulunca ve üzerinden yeterli süre geçtikten sonra yeni soruları da cevaplamaya çalışacağım.

  88. ada

    Hocam Merhaba benim çemberin yarıçapını ve merkezini bulmam lazım Çemberimin üç noktası bulunuyor ama formüle uyarlayamadım yardım eder misiniz?
    Formül:x kare+ ykare+dx+ey+f
    ya da çember tanımından bir noktaya eşit uzaklıktaki noktalar kümesi dolayısıyla iki nokta arasındaki uzaklıktan bulunacak nasıl olabilir

    1. ada

      Çemberin üç noktası biliniyor demek istemiştim Mesela (4,0) (0,4) (2,7) gibi üç nokta biliniyor yarıçapı ve merkezi bulmam lazım

    2. Şadi Evren ŞEKERŞadi Evren ŞEKER

      Sorunuzdan anladığım kadarıyla çember üzerindeki 3 nokta verildiğinde merkezini bulmanız.

      Sorunun matematiksel çözümünü vereceğim ve kodlamayı bundan sonra rahatlıkla yapabilirsiniz.

      (a,b) şeklinde bir noktanın merkez olduğunu kabul edelim. Bu durumda çemberin formülü aşağıdaki şekilde olacaktır:

      (x-a)2 + (y-b)2 = r2

      elimizdeki 3 noktanın ise aşağıdaki eşitlikleri sağlaması gerekecektir (noktaları (x1,y1), (x2,y2), (x3,y3) şeklinde 3 noktanın korrdinatı olarak kabul ediyorum :

      (x1-a)2 + (y1-b)2 = r2
      (x2-a)2 + (y2-b)2 = r2
      (x3-a)2 + (y3-b)2 = r2

      bu durumda denklem kümemizdd 3 bilinmeyen bulunuyor ve bunlar a,b ve r değeleridir. Aynı zamanda elimizde de 3 adet denklem bulunuyor.

      3 bilinmeyenli 3 denklemimiz var ve bunları çözmeye çalışalım. Ancak denklemleri yukarıdaki şekilde ele alırsanız 2. dereceden oldukları için bir doğrusal denklem (linear equation) şeklinde çözümde problem olabilir.

      Bu yüzden ilk denklemi diğer iki denklemden çıkararak işlem yapalım:

      (x2-a)2 + (y2-b)2 = r2
      - (x1-a)2 + (y1-b)2 = r2
      =
      (x1-a)2 + (y1-b)2 = (x1-a)2 + (y1-b)2

      ve

      (x3-a)2 + (y3-b)2 = r2
      - (x1-a)2 + (y1-b)2 = r2
      =
      (x3-a)2 + (y3-b)2 - (x1-a)2 + (y1-b)2

      olarak iki yeni denklem bulunacaktır. Aynı zamanda r değerini de aşağıdaki şekilde ifade edebiliriz:

      r = sqrt[(x1-a)2+(y1-b)^2]
      r = sqrt[(x2-a)2+(y2-b)^2]
      r = sqrt[(x3-a)2+(y3-b)^2]

      Bu denklemleri aşağıdaki şekilde düzenleyebiliriz:

               |x1^2+y1^2  y1  1|        |x1  x1^2+y1^2  1|
               |x2^2+y2^2  y2  1|        |x2  x2^2+y2^2  1|
               |x3^2+y3^2  y3  1|        |x3  x3^2+y3^2  1|
           a = ------------------,   b = ------------------
                   |x1  y1  1|               |x1  y1  1|
                 2*|x2  y2  1|             2*|x2  y2  1|
                   |x3  y3  1|               |x3  y3  1|
      
      

      Sizin örnek olarak verdiğiniz (4,0) (0,4) (2,7) noktalarını ele alırsak aşağıdaki şekilde çözüm elde edilebilir:

      (a-4)2 + (b-0)2 = r2
      (a-0)2 + (b-4)2 = r2
      (a-2)2 + (b-7)2 = r2

      Çözümde anlatıldığı gibi ilk satırı ikinci ve üçüncü satırlardan çıkarırsak aşağıdaki gibi bir durum olacaktır:

      (a-0)2 + (b-4)2 - (a-4)2 - (b-0)2 = 0
      (a-2)2 + (b-7)2 - (a-4)2 - (b-0)2 = 0

      Yukarıdaki denklemlerde bulunan parantezler açıldığında:

      a2 + b2 - 8b + 16 - a2 + 8a - 16 - b2 = 0
      ve
      a2 - 4a + 4 + b2 - 14b + 49 - a2 + 8a - 16 - b2 = 0

      denklemleri bulunacaktır. Denklemleri sadeleştirirsek aşağıdaki şekli alırlar:

      8a - 8b = 0
      4a - 14b + 37 = 0

      yukarıdaki denklemlerde ilkine göre a = b olacak ve ikincisine göre de

      a = b = -37/10 olarak bulunacaktır. Demek ki çemberin merkezi (-3.7, -3.7) noktasında yer alacaktır.

      Yarı çapı da artık hesaplayabiliriz. İlk denklemimizden çözümü yapalım:

      (a+4)2 + (b+0)2 = r2

      (-3.7+4)2 + (-3.7+0)2 = r2

      r = sqrt (0.84 + 9.50) = sqrt ( 10.34 ) = 3.71 olarak bulunur.

      Bu değeri diğer bir denklemde deneyerek sağlamasını yapabiliriz. İkinci noktanın denklemi aşağıdaki şekildeydi

      (a+0)2 + (b+4)2 = r2

      olacağını ikinci noktanın denkleminden biliyoruz. O halde

      (-3.7+0)2 + (-3.7+4)2 = 3.712

      olması gerekir. Çözüldüğünde doğru olduğu görülecektir.

      Üçüncü nokta için de sağlama yapalım:

      (-3.7+2)2 + (-3.7+7)2 = 3.712
      r = sqrt(2.89 + 10.89 ) = 3.71 olarak bulunacaktır.

      Sağlamalarımızdan sonra da kesin olarak emin olduk ki bu üç nokta çemberin üzerindedir. Demek ki sizin verdiğiniz 3 noktanın üzerinden geçen çember aşağıdaki formüldeki gibi yazılabilir:

      (x-3.7)2 + (y-3.7)2 = 3.712

  89. Hakan SANDIKCI

    Hocam bi sorum olacak soruyu aynen yazıyorum;

    {
    int sirali = sirala(5);
    Console.Read();
    }
    

    bu sirala(int sayi) fonksiyonunu kullanıcıdan sayı degişkenlerine gelen değer kadar sayıyı alıp bu sayıyı sıraladıktan sonra diziyi geriye döndüren fonksiyondur. Altta yazıcam fonksiyonudaki eksik kodları tamamlayınız(for döngüsü,ConvertTo32(),Console.ReadLine ile)

    private static int[ ] sirala(int sayi)
    {int[ ] sirali =new int[sayi]
     
     
     
     
     
    .......
    return sirali
    }
  90. ada

    Hocam Merhaba kodu oluşturdum fakat ikinci kez determinant alırken yanlış hesaplıyor hatamı göremedim yardımcı olur musunuz?

    #include
    #include
    #include
    #include
    using namespace std;

    int main(){
    int x1,x2,x3;
    cout<<"xleri girin"<>x1;
    cin>>x2;
    cin>>x3;
    int y1,y2,y3;
    cout<<"yleri girin"<>y1;
    cin>>y2;
    cin>>y3;
    cout<<"x1ve x1 nin kare toplamı"<<x1*x1+y1*y1<<endl;
    cout<<"x2 ve x2 nin kare toplamı"<<x2*x2+y2*y2<<endl;
    cout<<"x3 ve x3 nin kare toplamı"<<x3*x3+y3*y3<<endl;

    int a[3][3],i,j;

    long determinant;
    cout<<"Enter the 9 elements of matrix:"<<endl;;
    for(i=0;i<3;i++)
    for(j=0;j>a[i][j];

    cout<<"\nThe matrix is\n"<<endl;
    for(i=0;i<3;i++){
    cout<<"\n";
    for(j=0;j<3;j++)
    cout<<a[i][j];
    }

    determinant = a[0][0]*((a[1][1]*a[2][2]) - (a[2][1]*a[1][2])) -a[0][1]*(a[1][0]*a[2][2] - a[2][0]*a[1][2]) + a[0][2]*(a[1][0]*a[2][1] - a[2][0]*a[1][1]);
    cout<<"determinant"<<determinant<<endl;
    int b[3][3],k,l;

    long determinant2;
    cout<<"Enter the 9 elements of matrix: "<<endl;
    for(k=0;k<3;k++)
    for(l=0;l>b[k][l];

    cout<<"\nThe matrix is\n"<<endl;
    for(k=0;k<3;k++){
    cout<<"\n";
    for(l=0;l<3;l++)
    cout<<b[k][l];
    }

    determinant2 = b[0][0]*((b[1][1]*b[2][2]) - (b[2][1]*b[1][2])) -b[0][1]*(b[1][0]*b[2][2] - b[2][0]*b[1][2]) + b[0][2]*(b[1][0]*b[2][1] - b[2][0]*b[1][1]);
    cout<<"determinant 2"<<determinant2<<endl;
    int c[3][3],n,o;

    long determinant3;
    cout<<"Enter the 9 elements of matrix: "<<endl;
    for(n=0;n<3;n++)
    for(o=0;o>c[n][o];

    cout<<"\nThe matrix is\n"<<endl;
    for(n=0;n<3;n++){
    cout<<"\n";
    for(o=0;o<3;o++)
    cout<<c[n][o];
    }

    determinant3 = c[0][0]*((c[1][1]*c[2][2]) - (c[2][1]*c[1][2])) -c[0][1]*(c[1][0]*c[2][2] - c[2][0]*c[1][2]) + c[0][2]*(c[1][0]*c[2][1] - c[2][0]*c[1][1]);
    cout<<"determinant3"<<determinant3<<endl;

    int m;
    m=determinant/2*determinant2;
    cout<<"m="<<m<<endl;
    int m2;
    m2=determinant3/2*determinant2;
    cout<<"m2="<<m2<<endl;
    int yaricap,x,y;
    cout<<"x i gir"<>x;
    cout<<"y yi gir"<>y;
    yaricap=sqrt((x-m)*(x-m)+(y-m2)*(y-m2));
    cout<<"yaricap="<<yaricap<<endl;

    return 0;
    }

  91. Recep U.

    Verilen bir tamsayının "1" ve kendisi dışındaki çarpanlarını görüntüleyen bir program algoritması lazım yardım edebilir misiniz?

    1. ada

      Hocam izninizle soruyu gördüm ve cevaplamak istedim vaktim varken eğer cevabı beğenmezseniz ve yanlış bir şey görürseniz bana söylerseniz sevinirim

      int main()
      {
         int m;
         int x;
         printf("Bir sayi giriniz: ");
         scanf("%d",&m);
       
         for(x=2;x<m;x++)
         {
            if( m % x == 0 )
               printf("%d\n",x);
         }
       
         return 0;
      }

      bak arkadaşım m bizim girdiğimiz sayı x de böldüğümüz sayılar for döngüsünü 2 den başlattım çünkü 1 istemiyosun ve x<= demedim kendisine de eşit olanı istemiyosun o yüzden x< dedim gayet anlaşılır bir kod kolay gelsin

      1. Şadi Evren ŞEKERŞadi Evren ŞEKER

        Teşekkürler. Kodunuz doğru ancak yazıdaki ikinci sorunun çözümünde (yazının konusu olan quiz sorularının çözümünde) bir kod ve çözüm var. Recep Bey niçin bir kere daha sormuş bilemiyorum ama çözüm zaten yazıda vardı.

        Sizin çözüme gelince, doğru olmakla birlikte performans açısından biraz daha yavaş çalışacaktır. Bunun sebebi bir sayının kendinden küçük bütün sayılarla test edilmesidir. Aslında fermat teoremine göre bir sayının kareköküne kadar olan sayıları test etmeniz yeterlidir (hiçbir sayının karekökünden büyük çarpanı olamaz) ancak yine de performans açısından yukarıdaki çözüm daha iyi olabilir (Aradaki farkı örnekler üzerinden deneyerek görebilirsiniz, ufak bir not: 3 haneli bir sayının bir haneli bir sayıya bölünmesi ile iki haneli bir sayının bir haneli bir sayıya bölünmesi arasında performans farkı vardır).

        Yine de kod ve yardımınız için teşekkürler, sitede çok sayıda soru geliyor ve vakit buldukça cevap yazmaya çalışıyorum ama çoğuna yetişemiyorum, bu şekilde cevaplar gerçekten çok yardımcı oluyor.

  92. ada

    Hocam merhaba Kod çalışıyor Fakat bu kodu daha güzel hale getirmek istiyorum Mesela determinant bir,determinant 2 ve determinant 3 diye bir fonksiyon oluşturmak istesem
    determinant 1 in içi şu işlemi görsün
    |x1^2+y1^2 y1 1|
    |x2^2+y2^2 y2 1|
    |x3^2+y3^2 y3 1|

    determinant 2 nin içi

    |x1 y1 1|
    |x2 y2 1|
    |x3 y3 1|
    determinant üçün içi de
    |x1 x1^2+y1^2 1|
    |x2 x2^2+y2^2 1|
    |x3 x3^2+y3^2 1|

    bu işlevi görsün ve bu x i yi biz kendimiz verelim
    Bunu nasıl yapabilirim ben bir şeyler düşündüm ama tamamlayamadım yardımcı olur musun (float) cinsinden olmalı Bunu istememin sebebi çok büyük sayılarla uğraşıyorum ve tek tek girince hem zor oluyor hem de yanlış girdiğimde baştan girmem gerekiyor en azından bir kısmını gösterin ben tamamlayayım
    Rahatsız ettiğim için özür dilerim

  93. ada

    #include

    #include
    #include
    //using namespace std;
    float determinant(float arr[][3])
    {
    float det=0.0;
    int i;
    for(i=0;i<3;i++)
    det = det + (arr[0][i]*(arr[1][(i+1)%3]*arr[2][(i+2)%3] - arr[1][(i+2)%3]*arr[2][(i+1)%3]));
    return det;
    }

    int main()
    {
    float matris1[3][3],matris2[3][3],matris3[3][3];
    float x[3],y[3];//x1,x2,x3/y1,y2,y3
    int i,j;

    printf("x1 x2 ve x3 u giriniz\n");
    scanf("%f%f%f",&x[0],&x[1],&x[2]);

    printf("y1 y2 ve y3 u giriniz\n");
    scanf("%f%f%f",&y[0],&y[1],&y[2]);
    //matris1 i oluşturma
    for(i=0;i<3;i++)
    for(j=0;j<3;j++)
    if(j==0)
    matris1[i][j]=pow(x[i],2)+pow(y[i],2);
    else if(j==1)
    matris1[i][j]=y[i];
    else
    matris1[i][j]=1;

    //matris2 yi oluşturma
    for(i=0;i<3;i++)
    for(j=0;j<3;j++)
    if(j==0)
    matris2[i][j]=x[i];
    else if(j==1)
    matris2[i][j]=y[i];
    else
    matris2[i][j]=1;

    //matris3 yi oluşturma
    for(i=0;i<3;i++)
    for(j=0;j<3;j++)
    if(j==0)
    matris3[i][j]=x[i];
    else if(j==1)
    matris3[i][j]=pow(x[i],2)+pow(y[i],2);
    else
    matris3[i][j]=1;

    //matris1 i ve determinantını yazdırma
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    {
    printf("%.2f ",matris1[i][j]);
    }
    printf("\n");
    }
    printf("Determinanti1 =%.2f \n\n",determinant(matris1));

    //matris2 i ve determinantını yazdırma
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    {
    printf("%.2f ",matris2[i][j]);
    }
    printf("\n");
    }
    printf("Determinanti2 =%.2f \n\n",determinant(matris2));

    //matris3 i ve determinantını yazdırma
    for(i=0;i<3;i++)
    {
    for(j=0;j<3;j++)
    {
    printf("%.2f ",matris3[i][j]);
    }
    printf("\n");
    }
    printf("Determinanti3 =%.2f \n\n",determinant(matris3));
    float a,b;
    a=determinant(matris1)/(2*determinant(matris2));
    b=determinant(matris3)/(2*determinant(matris2));
    // cout<<a<<" "<<b<<endl;
    printf("%.2f ",a);
    printf("%.2f ",b);
    float yaricap;

    //cout<<"k ve l yi girin"<<endl;
    // printf("k ve l yi gir = \n\n");
    // scanf("%f%f",&k,&l);

    yaricap=sqrt((x[0]-a)*(x[0]-a)+(y[0]-b)*(y[0]-b));
    // cout<<"yaricap="<<yaricap<<endl;
    printf("yaricap =%.2f \n\n",yaricap);
    return 0;

    }

    sorunu hallettim

  94. ada

    Hocam merhaba ben std vectörle ilgili bir şey sormak istiyorum Benim koordinatları (x ve y olmak üzere 2 tane) std vectöre atmam lazım fakat hata veriyor ikili olunca std vectör nasıl kullanılıyor

  95. ada

    Hocam Merhaba ben resimde istediğim koordinatları üç farkl ıgrupta yazdırdım Koordinat ikili bir biçimde olduğu için biraz farklı yatım Şimdi de ardışık koordinatları sildirmek istiyorum (mesela şöyle 329 300; 328 300; 330 300; 330 300 gibi ise sadece bunlardan birinin kalması yeterli Ben şöyle yaptım fakat olmadı bir bakar mısınız?


    #include #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/contrib/contrib.hpp"
    #include
    #include
    #include
    using namespace std;
    using namespace cv;
    struct Koordinat {
    int x;
    int y;
    };
    int main()
    {
    int const r1 =100,r2=75,r3=50;
    std::vector cember1, cember2, cember3;
    std::vectordizi;
    Mat image = imread("C:\\OpenCV2.4.6\\56.png");
    //circle( image, Point( 385, 385 ), 100.0, Scalar( 0, 0, 255 ), 1, 8 );
    for(int i = 0; i < image.rows; ++i) {
    for(int j = 0; j < image.cols; ++j) {
    int b=int(image.at(i,j)[0]);
    int g=int(image.at(i,j)[1]);
    int r=int(image.at(i,j)[2]);
    int x=385,y=385;

    float cember_denklemi1,cember_denklemi2,cember_denklemi3;
    cember_denklemi1= sqrt((i-x)*(i-x)+(j-y)*(j-y)-(r1*r1));
    cember_denklemi2= sqrt((i-x)*(i-x)+(j-y)*(j-y)-(r2*r2));
    cember_denklemi3= sqrt((i-x)*(i-x)+(j-y)*(j-y)-(r3*r3));
    if(cember_denklemi1=0)
    cout<<"KIRMIZI"<<i<<" "<<j<<endl;

    cember1.push_back({i, j});

    if(cember_denklemi2=0)
    cout<<"YESİL"<<i<<" "<<j<<endl;
    cember2.push_back({i, j});
    if( cember_denklemi3=0)
    cout<<"MAVİ"<<i<<" "<<j<<endl;

    cember3.push_back({i, j});
    }
    }
    for(int i=0;i<cember1.size();i++)
    {
    for(int j=i+1;j<cember1.size();j++)
    {
    if((cember1.at(i).x-cember1.at(j).x)*(cember1.at(i).x-cember1.at(j).x)+(cember1.at(i).y-cember1.at(j).y)*(cember1.at(i).y-cember1.at(j).y)<3)
    dizi.push_back(j);
    }

    }
    for(int j=0;j<dizi.size();j++)
    {
    cember1.erase(cember1.begin()+dizi.at(j));
    }
    dizi.clear();

    }

  96. baran

    #include #include int A, B, C, D, i; int mak (int x, int y) { int k ; k= 2*x+y-2; return k; } main () { A=4 ; B=A-1; C mak (A, B)+2 ; D=2*C-A+3; for (i=1; i <=2; i++) {if (B+C <D-4) { C=B-A+2; A=C-2; B=A+B-2;} else { C=B+A-2; A=C+7; B=A-C+2;} D=B-mak (A-2,6); printf ("A=% 4d B=% 4d C=% 4d D =% 4d/n ", A,B,C,D);} getch ( );}

  97. ada

    Hocam Merhaba
    Ben c++ ın temel konularını bitirdim Yani classları friend fonksiyonları... Fakat bunların pekişmesini istiyorum Bunun için ne yapmam lazım Önerebileceğiniz kitap ya da alıştormalar olan bir site var mıdır ? Ya da bakmadım ama siz sitenizde böyle örneklere yer verdiniz mi?

  98. husne

    hocam üçüncü dereceden denklemin c programında kökünü nasıl buluyoruz.yardımcı olur musunuz... soru: f(X)=x^3+x+1 fonksiyonun [-1.2]aralığındaki kökü bulma? şimdiden tşkler

  99. ada

    Hocam merhaba
    Ben amacımı gerçekleştirdim Amacım bir eğri üzerinden 3 nokta almaktı bunun için öncelikle yarıçapı farklı olan 3 çember (hayali) çizdirdimBunların eğrileri kestiği noktaları işaretledim Ama eğriler kesikli olduğu için ve belki çember kesmez diye bir bant aralığı oluşturdum ve sonra çıkan sonuçları bir diziye atadım ve yazdırdım buradan komşu pikselleri sildirdim ve elimde her eğriye ait 3 nokta kalmış oldu. Fakat şimdi yapmam gereken şey bu noktaların hangileri aynı eğri üzerinde yer alıyor Bunun için oluşturduğum noktaları üç tane iç içe for döngüsüne atıp ve sonra bir if yapısıyla çember denklemini sağlayıp(çemberin merkezi 180 180) çemberin merkezinden geçip geçmediğiniz kontrol etmem lazım eğer geçiyorsa bunları da üçlü grup halinde kaydetmeliyim Fakat sanırım ben bu noktaları ayrı isimlendirmedim ve nasıl for döngüsüne atacağımı bilmiyorum Bunu nasıl yapabilirim yardım eder misini?
    (Not: ya ben konuyu galiba çok karışık anlattım galiba kusura bakmayın)
    kod:

    #include
    #include
    #include "opencv2/highgui/highgui.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/contrib/contrib.hpp"
    #include
    #include
    #include
    using namespace std;
    using namespace cv;
    struct Koordinat {
    int x;
    int y;
    };
    int main()
    {
    int const r1 = 50, r2 = 73, r3 = 15;
    std::vector cember1, cember2, cember3;

    Mat image = imread("C:\\OpenCv2.4.6\\atlas56.png");

    int ikiBoyutKarsilastirDizi[100][2] = {};
    int atlananKoordinatlar[100][2] = {};
    cv::Vec3b pixelColor(255, 255, 0);

    //circle( image, Point( 385, 385 ), 100.0, Scalar( 0, 0, 255 ), 1, 8 );
    //circle(image, Point(385, 385), 100, Scalar(255, 0, 0), 1, 8, 0);

    Vec3b color2 = image.at(Point(394, 378)); //beyaz 255 255 255 mi kontrolü.

    for (int i = 0; i < image.cols; ++i) { // row la sütunun yeri yanlış olduğu için hesaplamalar yanlıs çıkıyor...
    for (int j = 0; j < image.rows; ++j) {

    Vec3b intensity = image.at(j, i);
    uchar blue = intensity.val[0];
    uchar green = intensity.val[1];
    uchar red = intensity.val[2];
    //int b = int(image.at(i, j)[0]);
    //int g = int(image.at(i, j)[1]);
    //int r = int(image.at(i, j)[2]);
    int x = 385, y = 385;

    int cember_denklemi1;
    int cember_denklemi2;
    int cember_denklemi3;
    //float cember_denklemi1, cember_denklemi2, cember_denklemi3;
    ///**/
    //cember_denklemi1 = sqrt((i - x)*(i - x) + (j - y)*(j - y) - (r1*r1));
    //cember_denklemi2 = sqrt((i - x)*(i - x) + (j - y)*(j - y) - (r2*r2));
    //cember_denklemi3 = sqrt((i - x)*(i - x) + (j - y)*(j - y) - (r3*r3));

    cember_denklemi1 = (i - x)*(i - x) + (j - y)*(j - y) - (r1*r1);
    cember_denklemi2 = (i - x)*(i - x) + (j - y)*(j - y) - (r2*r2);
    cember_denklemi3 = (i - x)*(i - x) + (j - y)*(j - y) - (r3*r3);
    int sayac = 0;

    if (cember_denklemi1 >=0 && cember_denklemi1 0))
    {

    image.at(Point(i, j)) = pixelColor;

    //Vec3b color = image.at(Point(i, j));
    cout << "gelen koordinat : " << i << " " << j << endl;
    if (ikiBoyutKarsilastirDizi[0][0] == 0)
    //eğer dizinin içi boş ise vektörü ata. i ve j yi göster.
    {
    ikiBoyutKarsilastirDizi[0][0] = i;
    ikiBoyutKarsilastirDizi[0][1] = j;
    cout << "KIRMIZI" << i << " " << j << endl;

    // image.at(Point(i, j)) = color2;
    }
    else //dizinin ilk elemanı atanmış ise karşılaştırma yap 5 fark kuralına uygunsa diziye ekle, uygun değilse vektörü atla. Atladıysan vektörü gösterme atlamadıysan vektörü göster.
    {
    for (int z = 0; z= 5 || abs(ikiBoyutKarsilastirDizi[z][1] - j) >= 5) // eğer daha önce diziye atanmış vektörün x ve y'si yeni eklenmeye çalışan vektörün x ve y' sinden 5 fazla yada eksik mi kontrolü. abs'ın amacı -3 yada -2 çıkma durumunda olayı kurtarmak.
    {// Doğruysa,atlamadığımız için karşılaştırma dizisine ata,göster.
    //sürekli olarak 1'e yada 0 a kaydediyor dizideki ilk 0 indisini bul demek lazım.iptal kontrolü dışarı çıkar.

    sayac = z;

    }
    else
    {

    sayac = -1;
    break;
    }
    }
    }
    //bütün değerlerin kontrolü yapıldıktan sonra eleman eklenmeli ve gösterilmeli.
    if (sayac != -1)
    {

    ikiBoyutKarsilastirDizi[sayac + 1][0] = i;
    ikiBoyutKarsilastirDizi[sayac + 1][1] = j;
    cout << "KIRMIZI" << i << " " << j << endl;

    }
    else //atlanan koordinat buraya düşecek.
    {
    cout << "atlanan koordinat: " <<i << " " << j <=0 && cember_denklemi2 0))
    {

    image.at(Point(i, j)) = pixelColor;

    //Vec3b color = image.at(Point(i, j));
    cout << "gelen koordinat1 : " << i << " " << j << endl;
    if (ikiBoyutKarsilastirDizi[0][0] == 0)
    //eğer dizinin içi boş ise vektörü ata. i ve j yi göster.
    {
    ikiBoyutKarsilastirDizi[0][0] = i;
    ikiBoyutKarsilastirDizi[0][1] = j;
    cout << "BUYUK" << i << " " << j << endl;

    // image.at(Point(i, j)) = color2;
    }
    else //dizinin ilk elemanı atanmış ise karşılaştırma yap 5 fark kuralına uygunsa diziye ekle, uygun değilse vektörü atla. Atladıysan vektörü gösterme atlamadıysan vektörü göster.
    {
    for (int z = 0; z= 5 || abs(ikiBoyutKarsilastirDizi[z][1] - j) >= 5) // eğer daha önce diziye atanmış vektörün x ve y'si yeni eklenmeye çalışan vektörün x ve y' sinden 5 fazla yada eksik mi kontrolü. abs'ın amacı -3 yada -2 çıkma durumunda olayı kurtarmak.
    {// Doğruysa,atlamadığımız için karşılaştırma dizisine ata,göster.
    //sürekli olarak 1'e yada 0 a kaydediyor dizideki ilk 0 indisini bul demek lazım.iptal kontrolü dışarı çıkar.

    sayac2 = z;

    }
    else
    {

    sayac2 = -1;
    break;
    }
    }
    }
    //bütün değerlerin kontrolü yapıldıktan sonra eleman eklenmeli ve gösterilmeli.
    if (sayac2 != -1)
    {

    ikiBoyutKarsilastirDizi[sayac2 + 1][0] = i;
    ikiBoyutKarsilastirDizi[sayac2 + 1][1] = j;
    cout << "BUYUK" << i << " " << j << endl;

    }
    else //atlanan koordinat buraya düşecek.
    {
    cout << "atlanan koordinat1: " <<i << " " << j <=0 && cember_denklemi3 0))
    {

    image.at(Point(i, j)) = pixelColor;

    //Vec3b color = image.at(Point(i, j));
    cout << "gelen koordinat2 : " << i << " " << j << endl;
    if (ikiBoyutKarsilastirDizi[0][0] == 0)
    //eğer dizinin içi boş ise vektörü ata. i ve j yi göster.
    {
    ikiBoyutKarsilastirDizi[0][0] = i;
    ikiBoyutKarsilastirDizi[0][1] = j;
    cout << "KUCUK" << i << " " << j << endl;

    // image.at(Point(i, j)) = color2;
    }
    else //dizinin ilk elemanı atanmış ise karşılaştırma yap 5 fark kuralına uygunsa diziye ekle, uygun değilse vektörü atla. Atladıysan vektörü gösterme atlamadıysan vektörü göster.
    {
    for (int z = 0; z= 5 || abs(ikiBoyutKarsilastirDizi[z][1] - j) >= 5) // eğer daha önce diziye atanmış vektörün x ve y'si yeni eklenmeye çalışan vektörün x ve y' sinden 5 fazla yada eksik mi kontrolü. abs'ın amacı -3 yada -2 çıkma durumunda olayı kurtarmak.
    {// Doğruysa,atlamadığımız için karşılaştırma dizisine ata,göster.
    //sürekli olarak 1'e yada 0 a kaydediyor dizideki ilk 0 indisini bul demek lazım.iptal kontrolü dışarı çıkar.

    sayac3 = z;

    }
    else
    {

    sayac3 = -1;
    break;
    }
    }
    }
    //bütün değerlerin kontrolü yapıldıktan sonra eleman eklenmeli ve gösterilmeli.
    if (sayac3 != -1)
    {

    ikiBoyutKarsilastirDizi[sayac3 + 1][0] = i;
    ikiBoyutKarsilastirDizi[sayac3 + 1][1] = j;
    cout << "KUCUK" << i << " " << j << endl;

    }
    else //atlanan koordinat buraya düşecek.
    {
    cout << "atlanan koordinat2: " <<i << " " << j << endl;

    }

    }
    }

    }
    }
    imshow("Image", image);
    int k = waitKey();
    imwrite("atlas35.jpg", image);
    //waitKey( 0 );
    return(0);
    }

    Sorum basit oldu ama kusura bakmayın

  100. esma

    s.a hocam okulda hocamız bizden sınıfın medyanını bulun dedi küçükten büyüye sıraladım fakat baştan ve sondan eşit uzaklıkta olan sayıyı bulamıyorum yardımcı olursanız dua ederim size 🙂

      1. ada

        Merhaba
        Ben c ile olanını sana verebilrim o da şu

        int i,j;
        int sinif[10]={ssınıfın değerlerini girersin};
        int tasiyici, uz;
        float medyan;
        float deger1, deger2;

        main()
        {
        for(uz=0;uz<10;uz++)
        {
        uz=uz+1;
        }

        for (i=0;i<10;i++)
        {
        for (j=i+1;jsayilar[j])
        {
        tasiyici=sayilar[i];
        sayilar[i]=sayilar[j];
        sayilar[j]=tasiyici;
        }

        }
        }

        /* for (j=0;sayilar[j];j++)
        {
        printf("%d",sayilar[j]);
        printf("\n");
        }
        */
        if ((uz%2)==0)
        {
        deger1=uz/2;
        deger2=deger1+1;
        printf("Medyan %f",(deger1+deger2)/2);
        }
        else if ((uz%2)==0)
        {
        deger1=uz/2;
        printf("Medyan %f",deger1);
        }

        getch(); //system(“pause”);
        }

        Bir de biraz baktım c# ile olanı da şu olabilir c# pek bilmiyorum o yüzden doğru mu bilemem İşimde var pek bakamadım açıkçası

        List numbers = new List();
        double n = 0;
        double m = 0;
        string text = "";

        do{
        Console.WriteLine("Sayı giriniz? Çıkış için Q'ya basınız");
        text = Console.ReadLine();
        if (String.Equals(text.ToUpper(), "Q", StringComparison.CurrentCulture)) { break; };
        try
        {
        n = double.Parse(text);
        numbers.Add(n);
        }
        catch { Console.WriteLine("Lütfen sayı giriniz!"); }
        } while (true);
        numbers.Sort();
        if (numbers.Count % 2 == 0){
        m = (double)(numbers[(numbers.Count / 2)-1] + numbers[(numbers.Count / 2 + 1)-1])/2;
        }
        else{
        m = (double)numbers[((numbers.Count + 1) / 2)-1];
        }
        Console.WriteLine("Sayılar:");
        for (int i = 0; i < numbers.Count; i++) {
        Console.Write("{0},",numbers[i]);
        }
        Console.WriteLine("Median:{0}", m);
        Console.ReadKey();

  101. KÜBRA

    MERHABA HOCAM benimde bir sorum var
    INT_MIN VE INT_MAX fonksiyonlarını kullanarak integer ve işaretsiz integer veri tipinde kullanılabilecek en büyük ve en küçük sayı değerlerini ekranda göstern c proğramını yazabilirmisiniz

  102. ada

    Hocam merhaba ben üç noktanın çember belirtip belirtmeme durumuyla ilgili kod yazdım sonuç alamıyorum bakar mısınız acaba
    double p1[100][3]={},p2[100][3]={},p3[100][3]={};
    double D,E,F,cember;
    Mat tmp;

    for(int n=0;n<syc1;n++)
    {
    for(int k=0;k<syc2;k++)
    {
    for(int m=0;m<syc3;m++)
    {
    tmp=cember_denklemi(Point2f(p1[n][0],p1[n][1]),
    Point2f(p2[k][0],p2[k][1]),
    Point2f(p3[m][0],p3[m][1]));

    D=tmp.at(0,0);
    E=tmp.at(0,1);
    F=tmp.at(0,2);
    cout<<"cember denklemi:"<<"x^2+y^2+"<<D<<"*x+"<<E<<"*y+"<<F<<"=0"<0)
    { //
    // if(sqrt(cember)/260) circle(image,Point(-D/2,-E/2),sqrt(cember)/2,Scalar(255,0,0),1,8);
    if((x*x+y*y+D*x+E*y+F)==0)
    {cout<<Point2f(p1[n][0],p1[n][1])<<"-"<<Point2f(p2[k][0],p2[k][1])<<"-"<<Point2f(p3[m][0],p3[m][1])<<endl;
    // cout<<"yaricap="<<sqrt(cember)/2<<endl;
    cout<<"bu uc nokta cember belirtir."<<endl;
    cout<<"bingo"<<endl;

    }
    }
    if(cember==0) cout<<"Nokta!"<<endl;

    if(cember<0) cout<<"cember belirtmez!"<<endl;

    }
    }

    }}

    kodun ilgili kısmı burası tabi bir de main fonk üstünde şunu tanımladım
    Mat cember_denklemi(Point2f A,Point2f B,Point2f C)
    {

    double W[3][3]={{A.x,A.y,1},
    {B.x,B.y,1},
    {C.x,C.y,1}};

    double T[3][1]={-(A.x*A.x+A.y*A.y),
    -(B.x*B.x+B.y*B.y),
    -(C.x*C.x+C.y*C.y)};
    Mat M=Mat(3,3,CV_64F,W);
    Mat N=Mat(3,1,CV_64F,T);

    Mat L=M.inv()*N;

    return L;
    }

  103. Kıvanç

    klavyeden verilen bir sayının (x) yine klavyeden verilen i. üssünü (Xi), üs alma işlemini kullanmadan hesaplayan ve ekrana yazdıran bir bilgisayar programı hazırlama. Proje odevım bu yardımcı olursanız sevinirim. Teşekkürler şimdiden.

  104. tarık buğra

    Write a program that reads a word and prints all substrings, sorted by length. For example, if the user provides the input “AND” the program prints
    A
    N
    D
    AN
    ND
    AND
    bu soruda bana yardımcı olabilrseniz çok sevinirim.

  105. suskun

    selamun aleykum hocam ben b.t.t. 10 sinif ogrencisiyim hocamiz bir odev verdi fakat naptimsa hep hata veriyo acaba benmi yanlis yaziyorum odevim şu

    Kullanıcıya kaç tane sayıyı toplayacağını sorup, kullanıcının toplayacağı kadar sayıyı kullanıcıya tek tek soran ve kullanıcının yazdığı bu sayıların toplamını ekrana yazan programı Visual Studioda Console Application kısmında yazınız.

    Örneğin;

    Kullanıcıya kaçtane sayı gireceğini soracak mesela 4 sayı ve sonra kullanıcı 1. sayıyı girdi örneğin bu sayı 129 olsun kullanıcıya toplamınız 129 diyecek sonra 2. sayıyı gir diyecek örneğin busayı 3 olsun sonra program ilk 2 sayıyı toplayıp 129+3=132 bu şekilde 4 sayıyının toplamını ekrana verecek tabi 3. sayıdan sonrada ara toplamı verecek ve 4. sayıdan sonrada ana toplamı verecek..

    4 sayıyı ben örnek verdim bu sayı kullanıcıya göre değişmeli.

    ben bunu şu şekilde visual sutudio 2010 da su sekilde yaziyorum

    ?View Code CSHARP
    clas program
     {
     
            static void Main(string[] args)
     
            {
     
                int sayi, adet = 0;
     
                int toplam = 0;
     
                Console.Write("Kaç tane sayı toplayacaksın= ");
     
                adet = Convert.ToInt32(Console.ReadLine());
     
                for (int i = 1; i <= adet; i++)
     
                {
     
                    Console.Write(i + ". sayıyı giriniz= ");
     
                    sayi = int.Parse(Console.ReadLine());
     
     
     
                    toplam = toplam + i;
     
                }
     
                Console.WriteLine("Girdiğiniz sayıların toplamı= " + toplam);
     
                Console.ReadKey();
     
            }
     
        }
    1. Şadi Evren ŞEKERŞadi Evren ŞEKER

      Döngüdeki i değişkeni kaçıncı sayıyı girdiğiniz, sayi isimli değişken ise girilen sayıyı ifade ediyor. Dolayısıyla toplam değerinizin girilen sayıların toplamı olabilmesi için toplam = toplam + sayi şeklinde düzeltilmeli.

      Başarılar

  106. Koray

    Hocam merhaba. Bizden 1-99 arası 30 sayı girmemiz isteniyor. Bu sayılar arasındantekrar edilen her sayının kaç kez girldiğini bulmamız akabininde girilen en büyük ve en küçük sayıların arasındaki farkıda bulmamız isteniyor.. Dizilri görmediğimiz için henüz başarılı bir çalışma yapamadık. yardımcı olursanız seviniriz

  107. ayşe

    merhaba hocam size bir sorum olacaktı C# ta 1 ile 100 arasındaki sayıları listeye ekleyin diye bir soru verdi hocamız bu sayıları ekrana yazdırabiliyorum fakat listeye ekleyip ekrana yazdıramıyorum bunu nasıl yapabilirim acaba

  108. metehan

    hocam,
    Dörtlük sayısını,
    b) Boş satır dâhil satır sayısını,
    c) Kelime sayısını,
    d) Benzersiz kelime sayısını,
    e) Satır başına düşen ortalama kelime sayısını (boş satır hariç),
    f) Toplam karakter sayısını (boşluk karakteri hariç), bulup verilen sıra ile ekrana yazan programı kodlayınız. ben bu işlerin hangi değişken ve hangi kütüphaneler kullanılarak yapılacak yardımcı olabilir misiniz?

  109. yusuf

    Merhaba hocam , Karmaşık sayıları c dilinde nasıl tanımlayabiliriz acaba bu konuda yardımcı olabilirseniz çok sevinirim. Teşekkür ederim

  110. mert

    Merhaba
    Benim sorum şu:
    C#'da
    button1_click’e textboxtan 12 haneli sayı girip sayının ve sayının 5. 6. 7. 8. rakamlarını almak istiyorum.
    girilen örnek sayı:121420121968
    alınan sayı:2012

  111. Ayşe ÖZER

    merhaba hocam ben diziler konusunu öğrendimde biraz bi kod hakkında yardım isticektim

    kumeleri_yaz(intA[],intB[])
    •birlesim_yaz(intA[],intB[])
    •kesisim_yaz(intA[],intB[])
    •AfarkB_yaz(intA[],intB[])
    •BfarkA_yaz(intA[],intB[])
    •A_kart_B_yaz(intA[],intB[])

    benim bu işlemlerin kodunu yazmam lazım

  112. emre

    Bir dizi içerisindeki birden çok tekrar eden sayıların, ilk görüldükten sonra sile bir C programı yazınız. Örneğin; int list[] ={ 1, 4, 2, 5, 2, 1, 6, 7, 6} dizisi int listyeni[]={1, 4, 2, 5, 6, 7} haline dönüşmelidir. Bu sorunun c kodunu yazabilir misiniz hocam şimdiden teşekkürler.

  113. Gölge

    Arkadaşlar yardıma ihtiyacım var. Aşağıda yazdığım soruyu yapamadım. Acil Olarak C Dili kodlarına ihtiyacım var.

    Soru: Girilen X ve Y Kordinatlarına en yakın mekanları yazan C Dili programının kodlarını yazınız. Yani örnek vermem gerekirse mesela 5 hastane ve 5 kafeden en yakın olanları yazan program.

  114. emre

    hocam merhabalar ,benim sorum şu şekilde;

    Ekrandan iki farklı pozitif tam sayı girilmesini isteyin. Bu sayılardan küçük

    olandan büyük olanına kadar aradaki bütün tam sayıların toplamını yapan ve

    ekrana sonucu yazan bir programı C dilinde nasıl yazılır ??

  115. R

    en fazla 6 basamaklı bir sayı girilecek;
    bu girilen sayının basamak sayısı toplamı 10 ve en az 3 böleni olan bir sayı mı değil mi kontrol edilecek.
    bunu c dilinde nasıl yazabilirim? yardımcı olursanız sevinirim.

  116. Samet

    hocam merheba bir sorum olacaktı size asal çarpanları aynı şekilde bulacak ama bir döngüsüde olacak şekilde döngü 0 veya - değer çıktığında bitecek yardım edebilirmisiniz hocam

  117. Can

    Kullanıcının Girdiği ismi karışık nasıl yazılır ? örnek :Akrostiş şiir gibi alt alta yazacak mesela Brkau
    Ukarb
    Ruabk
    Arkbu
    Karbu

    Bunun Gibi aynı ama girilen her ismi böyle yazacak acil söylermisiniz

  118. ebru

    merhaba ben 10.sınıf öğrencisiyim.Hocam klavyeden girilen sayıyı kendisi kadar ekrana yazdıran programı yazmamı istedi yardımcı olabilirmisiniz?

  119. Tubi

    Bana yardım edebilirmisiniz ?
    Girilen 4 haneli bir tam sayının yüzler basamağındaki sayı değerinin ilk bölümünden elde edilen kalanın aynı sayının birler basamağındaki değer ile farkını bulan program. Metod ile çok az vaktim kaldı nasıl çalıştığını falan yazarsanız çok mutlu olurum.

  120. Mücahit

    Girilen bir n rakamina gore her cumledeki n. kelimeyi atlatarak yazan program yapmam gerekiyor yardimci olurmusunuz

  121. Cansel

    Hocam soyle bir soru yonlendiricem nasil yapacagimi bilmiyorum ;

    Oyle bir yazilim gelistirin ki , yazilim ilk basladiginda kullanicinin dogum tarihi istenilsin.
    Devaminda, verilen tarihe gore kullanicinin hangi mevsimde dogdugu gosterilsin ?

  122. Umut

    Ekrandan sırasıyla üç adet sayı alan ve ardından ekrana alt alta sırasıyla,
    Birinci sayı ile ikinci sayının farkını,
    İkinci sayı ile üçüncü sayının çarpımını,
    Birinci sayı ile üçüncü sayının toplamından ikinci sayı çıkartıldığını kalan sonucu yazdıran programı yazınız. . .

  123. helin

    hocam merhaba benim sorum girilen bir sayının tek sayılarını alıp yeni bir sayı yapan program

    örn:25678271 sayısını girince 5771 çıkmalı acil cevaplarsanız sevinirim.teşekkürler..

  124. fikret

    mrb hocam kullanıcıdan adını soyadını ve yaşını isteyen ve kullanıcıyı selamlayarak girdiği bilgileri ekrana yazdıran bir kodu nasıl yaparım örnek adiniz ali soyadınız can yaşiniz 22 merhaba al can adiniz ali soyadınız can yaşiniz 10

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir


6 − = iki