gusanmaz / BMB212_Algorithms

NKÜ Bilgisayar Mühendisliği BMB212 Veri Yapıları Dersi Uygulama Notları, Projeleri ve Ödevleri
27 stars 22 forks source link
algorithms algorithms-and-data-structures course homework-assignments homework-project java programming

NKÜ Bilgisayar Mühendisliği Veri Yapıları (BMB212) Dersi Uygulamalarının Not ve Duyuruları

Bu repo'da uygulama derslerine ait materyallere (ders notlari, odev bilgileri, proje bilgileri, duyurular vb.) ulasabilirsiniz.

DUYURU

Final sınavında tüm proje ve ödev soruları ile bağlantılı soru sorulabilir

1. Uygulama (22 Mart 2022)

Instructor

Ars. Gor. Güvenç Usanmaz

Oda: B207

Bolum: Bilgisayar Muhendisligi

Email: gusanmaz <att< nku nokta edu nokta tr

Prerequisites / Ders Hazirlik

  1. Github hesabi acilacak
  2. Repl.it hesabi acilacak
  3. Bilgilendirme Formu doldurulacak
  4. Universite email hesaplari duzenli kontrol edilecek
  5. Bu repo duzenli kontrol edilecek. Yeni odev ve proje duyurulari buradan ve/veya email yoluyla yapilacak

Odev ve Proje Sayfalari

Bu sayfalari duzenli takip etmeniz gerekmektedir. Yeni odev duyurulari, yeni proje duyurulari, daha onceden verilmis proje ve odevlerle ilgili yeni bilgiler/duzeltmeler bu sayfalardan ilan edilecektir.

Onerilen Kaynaklar

Algorithm Visualisation

Git

Git vs Renaming

IDE Kullanimi

Terminal Kullanimi

Debugging - Hata Ayiklama

Debugging Cat

Command Line Arguments

Linux CLI Power

Komut satirindan alinan iki tam sayinin toplamini ekrana yazdiran kod:

public class Main {
  public static void main(String args[]) {
    int num1 = Integer.parseInt(args[0]);
    int num2 = Integer.parseInt(args[1]);
    System.out.println(num1 + num2);
  }
}

Main.java isimli dosyada saklanabilecek yukarida verilen kodun derlenmesi icin calistirilmasi gereken terminal komutu:

javac Main.java

javac programinin derleme sonrasi olusturdugu calistirilabilir program Main.class'in calistirilmasi:

java Main 4 5 

Calistirilan programin ciktisi:

9

Bu haftaki alistirma linkleri

Not: Bu haftaki derste bahsedilen otomatik kod testi problemi cozulmustur. Kodunuz 'Commit changes' butonuna tiklandiktan sonra otomatik olarak derlenip, puanlandirilabilmektedir. Gonderdiginiz kodun derlenip, derlenmedigini, derlendiyse testleri gecip gecmedigini Actions sekmesi/tabi altinda gorebilirsiniz.

javac Main.java #Program Derleme
java Main 4 5 #Derlenmis programi 4 ve 5 argumanlari ile calistirma
4 #Program Ciktisi
java Main 9 8 #Derlenmis programi 9 ve 8 argumanlari ile calistirma
9 #Program Ciktisi
javac Main.java #Program Derleme
java Main 4 5 3 #Derlenmis programi 4, 5 ve 3 argumanlari ile calistirma
3 #Program Ciktisi
java Main 9 8 1 #Derlenmis programi 9,8 ve 1 argumanlari ile calistirma
1 #Program Ciktisi
java Main 9 -4 1 #Derlenmis programi 9,-4 ve 1 argumanlari ile calistirma
-4 #Program Ciktisi
javac Main.java #Program Derleme
java Main 5 #Derlenmis programi 5 degeri ile calistirma
120 #Program Ciktisi
java Main 1 #Derlenmis programi 1 degeri ile calistirma
1 #Program Ciktisi
java Main 0 #Derlenmis programi 0 degeri ile calistirma
1 #Program Ciktisi
java Main 3 #Derlenmis programi 6 degeri ile calistirma
6 #Program Ciktisi

Metin Dosyasindaki Degerleri Diziye Aktarma

Eliminiz altinda `liste.txt' isimli bir metin dosyasi olsun ve bu dosyada tam sayilar saklansin. Tam sayilar birbirinden bosluk (space) karakteri ile ayrilsin. Ornegin liste.txt dosyamizin icerigi asagidaki gibi olabilir.

5 6 7 8 9 4 3 5 4 3

Bu dosyayi okuyup icerigini int turde bir diziye aktarabiliriz. Parametre olarak dosya ismi (ya da yolu) alip o dosyadaki degerleri sirasiyla iceren int dizisi donduren ReadIntArrayFromFile metodunu inceleyiniz. Bu metodu icinde tam sayilarin birbirlerinden bosluk karakteri ile ayrildigi turde bir metin dosyasinda kullabiliriz; ama bu fonksiyonu bu formatta olmayan bir dosyanin iceriginden dizi elde etmek icin kullanmak beklenmeyen sonuclar uretebilir. Bu metodu bundan sonraki bazi odevlerde kullanmaniz gerekecektir. Bu nedenle metodun amacinin ne oldugunu ve metodun nasil kullanilabilecegini anlamaniz bazi odevleri kolay kodlayabilmenizde faydali olacaktir.

import java.io.FileReader;
import java.util.*;

public class Main {
    public static void main(String[] args){
        int[] elems = ReadIntArrayFromFile("list.txt");
        int i = 1;
        for (int v : elems){
            System.out.println("Dosyadaki " + i  + ". tam sayi " + v + "'dir.");
            i++;
        }
    }

    public static int[] ReadIntArrayFromFile(String path){
        List<Integer> intList = new ArrayList<Integer>();
        Scanner sc;
        try {
            sc = new Scanner(new FileReader(path)).useDelimiter("\\s+");
        }
        catch(Exception ex){
            return null;
        }

        while (sc.hasNext()) {
            String token = sc.next();
            int num = Integer.parseInt(token);
            intList.add(num);
        }

        int[] intArray = new int[intList.size()];
        int ind = 0;
        for (Integer v:intList){
            intArray[ind++] = v.intValue();
        }
        return intArray;
    }

}

Yukaridaki programin ciktisi:

Dosyadaki 1. tam sayi 5'dir.
Dosyadaki 2. tam sayi 6'dir.
Dosyadaki 3. tam sayi 7'dir.
Dosyadaki 4. tam sayi 8'dir.
Dosyadaki 5. tam sayi 9'dir.
Dosyadaki 6. tam sayi 4'dir.
Dosyadaki 7. tam sayi 3'dir.
Dosyadaki 8. tam sayi 5'dir.
Dosyadaki 9. tam sayi 4'dir.
Dosyadaki 10. tam sayi 3'dir.

Asagida bu metodu kullanan baska bir kod ve bu kodun terminal ciktisi verilmektedir. Verilen kod komut satiri argumani olarak alinan dosyadaki sayilarin toplamini ekrana yazdirmaktadir.

import java.io.FileReader;
import java.util.*;

public class Main {
    public static void main(String[] args){
       int[] arr = ReadIntArrayFromFile(args[0]);
       int sum = 0;
       for (int i = 0; i < arr.length; i++){
           sum += arr[i];
       }
       System.out.println(sum);
    }

    public static int[] ReadIntArrayFromFile(String path){
        List<Integer> intList = new ArrayList<Integer>();
        Scanner sc;
        try {
            sc = new Scanner(new FileReader(path)).useDelimiter("\\s+");
        }
        catch(Exception ex){
            return null;
        }

        while (sc.hasNext()) {
            String token = sc.next();
            int num = Integer.parseInt(token);
            intList.add(num);
        }

        int[] intArray = new int[intList.size()];
        int ind = 0;
        for (Integer v:intList){
            intArray[ind++] = v.intValue();
        }
        return intArray;
    }
}
cat listem.txt #cat komutu ile dosya icerigini ekrana yazdirabilirsiniz
1 3 5 89 -9 87 34
javac Main.java #Yukaridaki kodu derlemek icin terminale yazdigimiz komut
java Main.class listem.txt #Derlenmis programi listem.txt argumani ile calistirma
210 #Calistirdigimiz programin ciktisi

Yeni Odevler (Odev Verilme Tarihi: 28 Mart 2022)

Bu odevleri kodlayabilmeniz icin ReadIntArrayFromFile metodunu kullanmaniz gerekmektedir. Sablon kodlarda size hazir verilen bu metodun kodlari ile oynamayiniz ve herhangi bir degisiklik yapmayiniz!

cat list.txt
1 5 6 9 9 -3
javac Main.java
java Main list.txt
-7290
cat deneme.txt
1 1 1 -1 1 1 8 -4 9   2 2 1
javac Main.java
java Main deneme.txt
1152
cat deneme3.txt
     #deneme3.txt dosyasinda sadece bosluk karakterleri var. 
javac Main.java
java Main deneme3.txt
1 # 1 carpma isleminin etkisiz elemanidir.
cat a.txt
1 4 6 9 9 -3
javac Main.java
java Main a.txt
5
cat deneme.txt
0 0 0 0 1 1 8 -4 9 2 0 0
javac Main.java
java Main deneme.txt
0.666
cat cift.txt
1 6 4 4
javac Main.java
java Main cift.txt
4.666
cat a.txt
1 4 6 9 9 -3
javac Main.java
java Main a.txt
12 #9 - (-3)
cat deneme.txt
1 1 6 7 5 8 8 8 1 
javac Main.java
java Main deneme.txt
7 # 8 - 1
cat cift.txt
4 4 4 4 4
javac Main.java
java Main cift.txt
0 #4 - 4

Vize Uygulama Sorulari ve Cozumleri

9 Mayis 2022 (Odev ve Proje Degerlendirmeleri)

Trafik (22 Mayis 2022)

trafik_22_mayis