Başlayın

Örneklerle Öğrenin

Yeni bir dilde programlamayı öğrenmenin en iyi yollarından biri, çok sayıda örnek programa bakmaktır. Yapılacak en iyi şey aşağıdaki her programı kopyalayıp bir metin dosyasına yapıştırmak ve derlemektir. Ardından, denemeleri deneyin. Bu örnek programların kapsamını genişleterek C++'nın farklı yönlerine aşina olacaksınız ve sıfırdan program yazma zamanı geldiğinde kendinizi daha özgüvenli hissedeceksiniz.

1. Örnek: Derleyicinizi çalıştırın!

Henüz yapmadıysanız aşağıdaki klasik programı kopyalayıp bir metin dosyasına yapıştırın ve derleyin. Derlemeyle ilgili talimatları burada bulabilirsiniz.

Muhtemelen eğitimde bu programın ayrıntılarını incelemişsinizdir. Bu nedenle, burada satır satır bir açıklama sağlanmayacaktır. Ancak okunabilirlik konusunda dikkat edilmesi gereken birkaç nokta vardır. Programların okunmasını, anlaşılmasını ve sürdürülmesini kolaylaştıran yorumlar ve biçimlendirmeyi ifade eder.

  • Yazdığımız her program bir başlık yorumuyla başlar. Bu yorum yazarın adını, iletişim bilgilerini, kısa bir açıklamasını ve kullanımını (gerekirse) sağlar. Her işlev, çalışma ve kullanımla ilgili bir yorumla başlar.
  • Açıklayıcı yorumlar eklemek için tam cümleler kullanılır. Bu tür yorumlarda kodun kendini belgelememesi durumunda (ör. işlemin yanıltıcı, bariz olmayan, ilginç veya önemli olduğu durumlarda) yer veririz.
  • Her zaman açıklayıcı adlar kullanın: Değişkenler, my_variable gibi _ ile ayrılan küçük harfli kelimelerdir. İşlev adları, kelimeleri işaretlemek için büyük harflerle kullanır. Örneğin, MyExvocationFunction(). Sabitler bir "k" ile başlar ve kelimeleri işaretlemek için büyük harfler kullanır. Örneğin, kDaysInWeek.
  • Girinti, ikinin katlarıdır. İlk düzey iki boşluktur; daha fazla girinti gerekirse dört boşluk, altı boşluk vb. kullanırız.
// hello.cpp: Maggie Johnson
// Description: a program that prints the immortal saying "hello world"

#include <iostream>
using namespace std;

int main() {
  cout << "Hello World!" << endl;
  return 0;
}

Deneyebileceğiniz bazı denemeler:

  • En önemli şey bu programı derleyip çalıştırabildiğinizden emin olmaktır.
  • Yukarıdaki programı "Hello World!" ifadesini yazdıracak şekilde değiştirin. Her biri 17 boşluklu bir alana yazdırılır ve 6 satırlık bir satırda 4 kez gösterilir. Bunun için for-looops'u kullanın. Çıkışı cout ile biçimlendirme hakkında bilgi edinmek için burayı tıklayın. Çözümü görmek için burayı tıklayın.
  • Yeni tamamladığınız programı kullanarak, "Merhaba Dünya!"yı 17 boşluklu alanlarda sola hizalı (varsayılan olarak genellikle sağa hizalı) nasıl yazdıracağınızı bulun. Çözümü görmek için burayı tıklayın.

2. Örnek: Giriş alma

C++'da cin'i kullanarak klavyeden giriş almak kolaydır. Örnek:

// get_input.cpp: Maggie Johnson
// Description: Illustrate the use of cin to get input.

#include <iostream>
using namespace std;

int main() {
  int input_var = 0;
  // Enter the do while loop and stay there until either
  // a non-numeric is entered, or -1 is entered. Note that
  // cin will accept any integer, 4, 40, 400, etc.
  do {
    cout << "Enter a number (-1 = quit): ";
    // The following line accepts input from the keyboard into
    // variable input_var.
    // cin returns false if an input operation fails, that is, if
    // something other than an int (the type of input_var) is entered.
    if (!(cin >> input_var)) {
      cout << "You entered a non-numeric. Exiting..." << endl;
      break;
      // exit the do while loop
    }
    if (input_var != -1) {
      cout << "You entered " << input_var << endl;
    }
  } while (input_var != -1);
  cout << "All done." << endl;
  return 0;
}

Bir deneme:

  • Bir giriş hatası yapıldığında akış "bozulur", cin yanlış değerini döndürür ve program durur. Yukarıdaki programda yaptığımız gibi bu tür hatalara karşı koruma sağlamak çok önemlidir. Peki, programı durdurmak yerine hatadan kurtulmak istiyorsak ne olur? Bir hatayı iki adımda kurtarabilirsiniz:
    1. cin.clear() ile hatayı temizleyin.
    2. Yanlış karakterleri akıştan kaldırın. Bunu yapmanın bir yolu cin.ignore() kullanmaktır.

Bu iki adımı uygulayarak hatalı girişten kurtulan bir program yazın. Bu yöntemlerin işleyiş şeklini aramak için Google'ı kullanın. Çözümümüze buradan ulaşabilirsiniz.

3. Örnek: Bu programın çıktısı nedir?

#include <iostream>
using namespace std;

int main() {
  cout << " 1\t2\t3\t4\t5\t6\t7\t8\t9" << endl << "" << endl;
  for (int c = 1; c < 10; c++) {
    cout << c << "| ";
    for (int i = 1; i < 10; i++) {
      cout << i * c << '\t';
    }
    cout << endl;
  }
  return 0;
} 

4. Örnek: ayrıştırılması her şeyi kolaylaştırır...

Bilgisayar oyunları yazmaya başlamamızın zamanı geldi. İlki biraz basit olacak ama hep bir başlangıç. Görevimiz, tahmin oyunu uygulayan bir program yazmak. Programımız 0 ile 100 arasında rastgele bir sayı oluşturur. Oyuncu, gizli numarayı tahmin etmelidir. Oyuncu gizli numarayı tahmin edene kadar program, "bu çok yüksek" veya "çok düşük" gibi ipuçları sağlar.

Bu oyun üzerinde üç adımda çalışacağız. 

  1. Belirli bir değer aralığında nasıl rastgele sayı oluşturacağınızı bulma.
  2. Oyuncudan gelen bir tahmini işleyen ve ipuçları sağlayan bir ana işlev oluşturun.
  3. Oyuncu sayıyı tahmin edene kadar birden fazla tahmine izin vermemiz gerekenleri ekleyin.

Bu geliştirme sürecine ayrıştırma denir. Bu, bir görevi kolayca yapılabilen alt görevlere bölme anlamına gelir.

C++ kullanarak rastgele bir sayının nasıl oluşturulacağını görmek için 1. adımdan başlayarak bir Google araması yapın. "rand C++" ile arama yapmayı deneyin. Çözümümüz burada verilmiştir.

2. adım için oynatıcıdan bir tam sayı girişi almamız (cinsinde uygun hata kontrolüyle) ve bunu gizli numarayla karşılaştırarak kontrol etmemiz gerekir. Çözümümüzü kontrol etmeden önce oyunun bu bölümünü kendiniz yazmaya çalışın.

Son olarak, oyuncu gizli numarayı tahmin edene kadar tahminleri toplamaya devam eden bir döngü eklememiz gerekir. Programın bu bölümünü tamamladıktan sonra çözümümüze göz atabilirsiniz.

Ayrıştırma, bir programcının öğrenmesi gereken en önemli becerilerden biridir. Projenin boyutu ne kadar büyük veya küçük olursa olsun, bir görevi altından kalkılabilir parçalara ayırabilmek ve ardından bunları tek tek tamamlayabilmek kritik önem taşır. Ayrıştırma alıştırması yapabileceğiniz diğer fırsatları burada bulabilirsiniz.

  • Günlük görevlerin çoğu, becerilerin ayrıştırılmasına yönelik fırsatlar sunar. Zihninizin bu şekilde çalıştığını keşfetmek sizi şaşırtabilir.

    Örneğin, gerçekten dağınık bir mutfağı temizlemem gerekirse (belki bazı küçük pasta yaptıysa), bir plan yapmak ve işi daha sonra tekrar yapmak zorunda kalmamak için görevleri parçalara ayırırım. Tezgahlarda temizlenecek bir şeyler varsa önce zemini yıkamak istemiyorum. Muhtemelen daha sonra zemini yıkamak zorunda kalacağım. Belki de önce tüm malzemeleri bir kenara koyar, tüm bulaşıkları lavaboya taşırım, mutfak tezgâhlarını temizler, bulaşıkları yıkar ve son olarak zemini temizlerim. Bu görevi gerçekleştirmenin başka yolları da var ama önce üzerinde düşünüp bu yöntem, yeniden çalışma gerektirmeyecek bir plan tanımlamama yardımcı oluyor.

    Ayrıştırma becerilerinizi geliştirmek için günlük görevleri örnek olarak kullanın. Kim bilir? Bu, evdeyken daha verimli çalışmanızı bile sağlayabilir.

  • İki tam sayının en büyük ortak böleni, her ikisini de eşit olarak bölen en büyük sayıdır. Örneğin, gcd(12; 18) = 6, gcd(−4; 14) = 2. gcd'yi hesaplamanın en verimli yolu Öklid algoritmasıdır. İki tam sayı için gcd'yi hesaplayacak işleve sahip bir program yazın. İşlevi önce yineleme olmadan yapmayı deneyin. Bu, algoritmanın nasıl çalıştığını anlamanıza yardımcı olacaktır.

    Alt görevlerinizi açık bir şekilde tanımlayın. Örneğin, Öklid algoritmasının kodunu bulun, algoritma için yinelenmeyen bir işlev oluşturun vb. Çözümümüz burada'dır.

5. Örnek: Matematik Bulmacaları

Bilişimin güçlerinden biri, bir soruna çözüm bulmak için kaba kuvvette arama yapabilmektir. Deneme yanılma yöntemi bazı sorunlarda iyi sonuç verir. Hatta bilgisayarlar bu tür sorunlarda özellikle başarılı olabilir. Şunu göz önünde bulundurun:

Atların fiyatı 10 TL, domuzların fiyatı 3 TL ve tavşanların fiyatı 0, 50 TL. Bir çiftçi 100 hayvanı 100 ABD dolarına satın alıyor. Her hayvandan kaç tane satın aldı? 

Bu sorunun oldukça basit bir çözümü var. Bizimkilere bakmadan önce bulup olmadığına bakın.

Şunları da deneyebilirsiniz:
Bir rafta 6 farklı kitabı soldan sağa olacak şekilde kaç şekilde düzenleyebilirsiniz?

Bu kez çözümü size sunacağız ve programı yazmanıza izin vereceğiz: 720.

6. Örnek: Değerlendirebileceğiniz dizeler

Aşağıdaki program ne üretiyor?

#include <iostream>
using namespace std;

int main() {
  string str1 = "To be or not to be, that is the question";
  string str2 = "only ";
  string str3 = str1.substr(6, 12);
  str1.insert(32, str2);
  str1.replace(str1.find("to be", 0), 5, "to jump");
  str1.erase(9, 4);
  cout << str1 << endl;
  for (int i = 0; i < str3.length(); i++)
    cout << str3[i]; cout << endl;
}

Yardım almak için burayı tıklayın.

7. Örnek: Ayrıştırmayla sonraki adımlar - İşteki ilk gününüz

Kısa süre önce, çift başına maliyeti 225 ABD doları olan lüks spor ayakkabılarında uzman olan ExerShoe şirketinde satış görevlisi olarak pozisyona ulaştınız. Patronunuz size maaş için üç seçenek sundu. Bunları ilk gününüze başlamadan önce belirlemeniz gerekir:

  1. Haftada 600 dolarlık düz maaş;
  2. Saatte 7,00 dolar tutarında maaş ve satışlarda% 10 komisyon;
  3. Maaş yok, ancak satılan her ayakkabı için% 20 komisyon ve 20 TL

Siz uzman bir C++ programcısı olarak, en iyi maaş seçimine karar vermenize yardımcı olacak bir program yazabilirsiniz.

Daha büyük bir program için ayrıştırma yaparken yaygın olarak kullanılan bir yaklaşım, problemi çözmeye yönelik bir taslak gibi görünen bir ana işlev oluşturmaktır. Daha sonra her bir görevi yerine getirecek işlevleri yazıyoruz.

Ana programdaki ilk kullanım şu şekildedir:

  GetInput(WeeklySales);
  CalcMethod1(WeeklySales);
  CalcMethod2(WeeklySales);
  CalcMethod3(WeeklySales); 

Çözümümüze bakmadan önce bu işlevlerin her birini uygulayıp uygulayamayacağınıza bakın.

8. Örnek: Neler kullanılabilir?

Aşağıdaki programın sonucu nedir?

// scope.cpp, Maggie Johnson
// Description: A program to illustrate different scopes

#include <iostream>
using namespace std;

int a = 18;
int b = 6;

int function1(int a, int b) {
  return a - b;
}

int function2() {
  int c;
  c = a + b;
  return c;
}

int main() {
  int b = 12;
  int c = 0;
  a = function1(b, a);
  c = function2();
  cout << "a: " << a << " b: " << b << " c: " << c << endl;
}

Cevabınızı belirledikten sonra, kodun yorumlanan sürümünü buradan inceleyebilirsiniz.

9. Örnek: Dosyaları İşleme

C++'da dosya işleme fstream kullanılarak gerçekleştirilir. Bir dosyaya kaydetmek için bir yayın dışı belirtir ve bunu "out" modunu kullanarak açarız. Bunu aşağıdaki örnekte görebilirsiniz.

// file.cpp, Maggie Johnson
// Description: An illustration of file processing
#include <fstream>
#include <iostream>
using namespace std;

int main() {
  char first_name[30], last_name[30]; int age;
  char file_name[20];
  // Collect the data.
  cout << "Enter First Name: "; cin >> first_name;
  cout << "Enter Last Name: "; cin >> last_name;
  cout << "Enter Age: "; cin >> age;
  cout << endl << "Enter the name of the file: "; cin >> file_name;

  // Create an ofstream called People, open the stream for output.
  ofstream People(file_name, ios::out);
  // Write the output to the stream.
  People << first_name << endl << last_name << endl << age << endl; return 0;
} 
  • Yeni oluşturulan dosyayı nasıl açacağınızı bulup verileri gösteremeyeceğinizi öğrenin.Çözümümüze buradan ulaşabilirsiniz.
  • Şimdi bu programı, kullanıcının döngü içinde birçok veri kaydı girmesine izin verecek şekilde değiştirip değiştiremeyeceğinizi düşünün. Ayrıca tüm verileri tek seferde bir kayıt olacak şekilde okumak istiyoruz.Çözümümüze buradan ulaşabilirsiniz.

Artık kendi başınıza bazı alıştırmaları ve projeleri denemeye hazırsınız!

Google'da yazılım mühendisi olmak nasıl bir şey?

Google'da çalışmanın nasıl bir şey olduğunu öğrenmek için bu web sitesini ziyaret edin.

Alıştırmalar ve Projeler

Aşağıdaki alıştırmalar temel C++ ile ilgili daha fazla alıştırma yapmanıza yardımcı olacaktır. Bu kurstaki diğer öğrencilerle çalışmanızı istediğimiz için bu alıştırmalar ve projeler için çözüm sunmuyoruz.

  1. Ortak kulvarda kriket, mevcut sıcaklıkla doğru orantılı olarak cıvıl cıvıldıyor. Kriketin bir dakikadaki vuruş sayısına 40 ekledikten sonra bu değeri 4'e bölerek sıcaklığı elde ederiz. Dakikadaki titreşim sayısını girdi olarak alıp mevcut sıcaklığı yazdıran bir program yazın. Örneğin,
    Number of chirps: 120
    The temperature is: 40.0 degrees. 
  2. Aldığınız bir programlama kursunun final notunu hesaplayacak bir program yazın. Notlandırma şeması:
    Final grades will be based on the following:
    40% Assignments   15% Midterm Examination
    35% Final Examination
    10% Class Participation Grade 

    Programınız kullanıcıdan dört ödev puanı ile ara dönem, final ve bölüm notlarını istemelidir. Daha sonra, nihai puan hesaplanır ve yazdırılır. Hesaplamaları yapmak için dört ödev puanının ortalamasını toplu olarak çıkarıp 0, 4 ile (%40) çarparsınız. Ardından vize puanını 0,15, final puanını 0,35 ve katılım puanını 0,1 ile çarparsınız. Ardından bu çarpmaların tüm sonuçlarını toplarsınız.

    İşlevleri bu programda mümkün olan her yerde kullanabilirsiniz. Açıklayıcı bir dizede görüntülenecek dizeyi parametre olarak geçirerek girdiyi alacak bir işlev oluşturabilirsiniz. Örnek çalıştırma:

    Enter the score for the first assignment. 75
    Enter the score for the second assignment. 85
    Enter the score for the third assignment. 82
    Enter the score for the fourth assignment. 94
    Enter the score for the midterm. 81
    Enter the score for the final. 89
    Enter the score for the section grade. 100
    The final grade is: 86.9
  3. Elektronik kronometreler daha ucuz ve daha isabetli hale geldikçe, hiç kuşkusuz zamanın doğruluğu son derece isabetli olmayacak. Saniye cinsinden belirli bir süreyi girdi olarak alan ve bunu temsil ettiği saat, dakika ve saniye sayısını veren bir program yazın. Örneğin,
    Number of seconds: 3662
    Hours: 1
    Minutes: 1
    Seconds: 2     
  4. Aşağıda, programınızı yazmadan önce ayrıştırma işlemini gerçekleştirin. İyi yapılandırılmış programlar oluşturmak için mümkün olduğunda işlevleri kullanın.

  5. Aşağıdakiler için bir banner yazdırmak istediğimizi varsayalım:

    "ÜÇ Ağacı dondurmak istiyorum"

    Bu bir banner olduğundan harflerin oldukça büyük olmasını istiyoruz:

    FFFFF
    F
    FFF
    F
    F
    
    EEEEE
    E
    EEE
    E
    EEEEE
    
    vb.

    Problemleri ayrıştırıcı iyi bir yöntem olarak, tüm analizleri ana işleve yerleştirmek yerine bunları işlevlere yerleştirmenin çok daha verimli olacağını fark etmişsinizdir. Yani bir "printE" işlevimiz, bir "printZ" işlevimiz olabilir.

    Çok sayıda tekrarlanan harf içeren bir kelime veya kelime öbeği banner'ı oluşturan işlevlere sahip bir program yazın. Yapabileceklerinizden bazıları:

    FREEZY BREEZE MAKES FLEAS
    SNEEZE TWEETLE BEETLE PADDLE BATTLE
    SIX SICK CHICKS KICK
    SUE SEWS SUE'S SOCKS
    BEN BENDS BIM'S BROOM 
  6. Bir "sihirli sayı" sorunu: Kullanıcıdan, ilk hanesi sonuncundan büyük olan üç haneli bir sayı girmesini isteyin. Programınız sayıyı tersine çevirir ve tersini orijinal sayıdan çıkarır. Son olarak, elde edilen sayıyı tersine çevirin ve ters çevrilmiş biçimine ekleyin. Nihai sonucu çıkarır. Kullanıcının girdiği orijinal numara tam sayı türünde olmalıdır (üç karakter değil). Tam sayıyı girdi olarak alıp bu sayının tersini döndüren bir fonksiyonun nasıl yazılacağını düşünün. Örnek:
    input number: 901
    reverse it: 109
    subtract: 901 - 109 = 792
    reverse it: 297
    add: 297 + 792 = 1089   
  7. Yasa, gıda ürünü üreticilerinin ürünlerine son kullanma tarihleri koymalarını gerektirse de yasada bir açık söz konusudur: Son kullanma tarihinin belirli bir biçimde olmasını gerektirmez. Yani Svahili dilinde yazılsa da yasal olabilir.

    Ralph Nader'in üçüncü kuzeni Nadine, kendi kendisini tanımlayan bir Yiyecek Kalitesi Casusudur. Birçok gıda ürünü üreticisinin, müşterilerin ürünlerin ne kadar eski olduğunu bilmelerini önlemek için ürünlerin son kullanma tarihlerini kodlamaya başladığını öğrendi.

    Ancak kodlama, marketlerin bir nedenle istemeleri halinde son kullanma tarihlerini belirlemelerine olanak tanır.

    Popüler bir kodlama yöntemi:

    • Ocak'tan Aralık'a kadar olan ayları "A"dan "L"ye kadar kodlamak
    • tarihin her basamağını 'Q' ile 'Z' arasında kodla
    • yılı, "A"dan "Z"ye kadar kodlayın, yani 1'den 26'ya kadar olan sayı, 1995'e eklenir.

    Nadine, bu tarihte kuşkulu bir somun ekmek buldu: ARZM. Tarihi belirlemek için bir program yazın.

  8. Bu, meşhur bir kart numarasına benzer bir sayıdır. Kullanıcıdan üç haneli bir sayı girmesini isteyin. Sayıyı ABC olarak düşünün (burada A, B, C sayının üç basamağıdır). Şimdi, ABC, BCA ve CAB'nin oluşturduğu sayıların kalanını 11'e bölündüğünde bulun. Bu kalanları X, Y, Z olarak adlandıracağız. Bunları X+Y, Y+Z, Z+X olarak toplayın. Toplamlardan herhangi biri tekse bunu 11'e indirin veya 11'e çıkarın (hangi işlem sonucunda pozitif sayı 20'den küçükse toplam 9 ise bunu bildirin ve işlemi durdurun). Son olarak, toplamların her birini ikiye bölün. Elde edilen rakamlar A, B, C'dir. Bu algoritmayı uygulayan bir program yazın.

Uygulama: Müziği Animasyonla Görselleştirme

Yazılım mühendisleri, çok çeşitli sıklıkla ilginç ve yenilikçi uygulamalar oluşturur. Bu kursun her modülünde, mühendislerin çalıştığı tüm farklı alanları anlamanıza yardımcı olmak için mühendislerin tasarladığı ve uyguladığı farklı bir uygulama sunuyoruz.

Müziği görselleştirmek için tasarlanmış ilginç bir uygulamayı burada bulabilirsiniz.