{"id":24430781,"url":"https://github.com/gusanmaz/bmb212_algorithms","last_synced_at":"2025-09-06T09:42:27.668Z","repository":{"id":42713920,"uuid":"472494997","full_name":"gusanmaz/BMB212_Algorithms","owner":"gusanmaz","description":"NKÜ Bilgisayar Mühendisliği BMB212 Veri Yapıları Dersi Uygulama Notları, Projeleri ve Ödevleri","archived":false,"fork":false,"pushed_at":"2022-06-15T07:40:44.000Z","size":2334,"stargazers_count":27,"open_issues_count":10,"forks_count":22,"subscribers_count":16,"default_branch":"main","last_synced_at":"2025-04-12T12:53:46.776Z","etag":null,"topics":["algorithms","algorithms-and-data-structures","course","homework-assignments","homework-project","java","programming"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gusanmaz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-03-21T20:06:45.000Z","updated_at":"2024-09-08T07:34:07.000Z","dependencies_parsed_at":"2022-08-27T04:50:13.475Z","dependency_job_id":null,"html_url":"https://github.com/gusanmaz/BMB212_Algorithms","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gusanmaz/BMB212_Algorithms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusanmaz%2FBMB212_Algorithms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusanmaz%2FBMB212_Algorithms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusanmaz%2FBMB212_Algorithms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusanmaz%2FBMB212_Algorithms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gusanmaz","download_url":"https://codeload.github.com/gusanmaz/BMB212_Algorithms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gusanmaz%2FBMB212_Algorithms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273886630,"owners_count":25185509,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-06T02:00:13.247Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithms","algorithms-and-data-structures","course","homework-assignments","homework-project","java","programming"],"created_at":"2025-01-20T14:57:51.154Z","updated_at":"2025-09-06T09:42:27.637Z","avatar_url":"https://github.com/gusanmaz.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# NKÜ Bilgisayar Mühendisliği Veri Yapıları (BMB212) Dersi Uygulamalarının Not ve Duyuruları\n\nBu repo'da uygulama derslerine ait materyallere (ders notlari, odev bilgileri, proje bilgileri, duyurular vb.) ulasabilirsiniz. \n\n# DUYURU\n\n**Final sınavında tüm proje ve ödev soruları ile bağlantılı soru sorulabilir**\n\n## 1. Uygulama (22 Mart 2022)\n\n### Instructor\n\nArs. Gor. Güvenç Usanmaz\n\nOda: B207\n\nBolum: Bilgisayar Muhendisligi\n\nEmail: gusanmaz \u003catt\u003c nku nokta edu nokta tr\n\n### Prerequisites / Ders Hazirlik\n\n1. [Github](https://github.com/) hesabi acilacak\n2. [Repl.it](https://replit.com/) hesabi acilacak\n3. [Bilgilendirme Formu](https://forms.gle/8AzYpckY7S43QTjM8) doldurulacak\n4. Universite email hesaplari duzenli kontrol edilecek\n5. Bu [repo](https://github.com/gusanmaz/BMB212_Algorithms) duzenli kontrol edilecek. Yeni odev ve proje duyurulari buradan ve/veya email yoluyla yapilacak\n\n### Odev ve Proje Sayfalari\n\n* [Assignments Page - Odev Duyurulari](https://github.com/gusanmaz/BMB212_Algorithms/blob/main/odevler.md)\n* [Projects Page - Proje Duyurular](https://github.com/gusanmaz/BMB212_Algorithms/blob/main/projeler.md)\n* [Odev ve Proje Notlandirmalari](https://github.com/gusanmaz/BMB212_Algorithms/blob/main/grades.md)\n\nBu 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.  \n\n\n\n### Onerilen Kaynaklar\n\n* [CS50](https://cs50.harvard.edu/college/2022/spring/)\n* [Introduction to Programming in Java](https://introcs.cs.princeton.edu/java/home/)\n* [Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne](https://algs4.cs.princeton.edu/home/) \n* [Algoritmalar, Robert Sedgewick, NOBEL AKADEMİK YAYINCILIK](https://www.kitapyurdu.com/kitap/algoritmalar/498451.html)\n* [Introduction to Algorithms, Fourth Edition](https://www.amazon.com/Introduction-Algorithms-fourth-Thomas-Cormen/dp/026204630X)\n\n**Algorithm Visualisation**\n\n* [https://visualgo.net/en](https://visualgo.net/en)\n* [https://algorithm-visualizer.org/](https://algorithm-visualizer.org/)\n* [https://www.cs.usfca.edu/~galles/visualization/Algorithms.html](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html)\n\n### Git\n\n![Git vs Renaming](https://github.com/gusanmaz/BMB212_Algorithms/blob/main/images/git_vs_renaming.jpg)\n\n* [Pro Git book](https://git-scm.com/book/en/v2)\n* [Turkce Git 101](https://aliozgur.gitbooks.io/git101/content/)\n* [Git Basit Rehber](https://rogerdudler.github.io/git-guide/index.tr.html)\n* [Yeni Baslayanlar icin Git 101](https://medium.com/@muratcanbur/yeni-ba%C5%9Flayanlar-i%C3%A7in-git-101-ff7ea5b3eff9)\n* [Git Cheatsheet](https://education.github.com/git-cheat-sheet-education.pdf)\n* [Git Github Kullanim Rehberi](https://www.enesonmez.com/git-github-nedir-kullanim-rehberi/)\n* [Introduction to Git - talk by Scott Chacon](https://youtu.be/xbLVvrb2-fY)\n* [Introduction to Git with Scott Chacon of GitHub](https://youtu.be/ZDR433b0HJY)\n* [Git 101 | Git, GitHub nedir?](https://youtu.be/nyIdgGD74c4)\n* [Git, GitHub ve GitLab Kullanımı Playlist](https://www.youtube.com/playlist?list=PLPrHLaayVkhnNstGIzQcxxnj6VYvsHBHy)\n\n### IDE Kullanimi\n\n* [Jet Brains](https://www.jetbrains.com/)\n   *  [IntelliJ IDEA](https://www.jetbrains.com/idea/)\n   *  [CLion](https://www.jetbrains.com/clion/)\n   *  [PyCharm](https://www.jetbrains.com/pycharm/)\n   *  [GoLand](https://www.jetbrains.com/go/)\n   *  [Rider](https://www.jetbrains.com/rider/)\n* [VS Code](https://code.visualstudio.com/)\n* Visual Studio\n* [Repl.it](https://replit.com)\n\n\n### Terminal Kullanimi\n\n* [Linux Tutorial for Beginners - Learn Linux and the Bash Command Line](https://ryanstutorials.net/linuxtutorial/)\n* Windows? [Cygwin](https://www.cygwin.com/)\n\n### Debugging - Hata Ayiklama\n\n![Debugging Cat](https://github.com/gusanmaz/BMB212_Algorithms/blob/main/images/debug_cats.jpeg)\n\n* Break points\n* Step into vs. Step over\n* Step out\n* Variable values\n* [IntelliJ IDEA Debugging](https://www.jetbrains.com/help/idea/debugging-code.html)\n\n### Command Line Arguments\n\n* [Command Line Arguments](https://docs.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html)\n* [Java Ornek Kodu - Github Gist](https://gist.github.com/gusanmaz/49dae8ffd1b1511e7c394a259dae785d) \n* [Replit Ornek Kodu](https://replit.com/@GuvencUsanmaz/CommandLineArgsJavaExample1)\n\n![Linux CLI Power](https://github.com/gusanmaz/BMB212_Algorithms/blob/main/images/linux_cli.jpg)\n\nKomut satirindan alinan iki tam sayinin toplamini ekrana yazdiran kod:\n\n```java\npublic class Main {\n  public static void main(String args[]) {\n    int num1 = Integer.parseInt(args[0]);\n    int num2 = Integer.parseInt(args[1]);\n    System.out.println(num1 + num2);\n  }\n}\n```\n\nMain.java isimli dosyada saklanabilecek yukarida verilen kodun derlenmesi icin calistirilmasi gereken terminal komutu:\n\n```bash\njavac Main.java\n```\n\njavac programinin derleme sonrasi olusturdugu calistirilabilir program Main.class'in calistirilmasi:\n\n```bash\njava Main 4 5 \n```\n\nCalistirilan programin ciktisi:\n\n```bash\n9\n```\n\n### Bu haftaki alistirma linkleri\n\nNot: 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.\n\n* [Min2](https://classroom.github.com/a/zrZcp24R) Program parametre olarak 2 tamsayi (integer) deger okuyup bu degerlerden kucuk olanini ekrana yazdiracak. ***Son gonderim tarihi: 25 Mart 23:00***\n\n``` bash\njavac Main.java #Program Derleme\njava Main 4 5 #Derlenmis programi 4 ve 5 argumanlari ile calistirma\n4 #Program Ciktisi\njava Main 9 8 #Derlenmis programi 9 ve 8 argumanlari ile calistirma\n9 #Program Ciktisi\n```\n\n* [Min3](https://classroom.github.com/a/sdi4a0Zb) Program parametre olarak 3 tamsayi (integer) deger okuyup bu degerlerden kucuk olanini ekrana yazdiracak. ***Son gonderim tarihi: 25 Mart 23:00***\n\n``` bash\njavac Main.java #Program Derleme\njava Main 4 5 3 #Derlenmis programi 4, 5 ve 3 argumanlari ile calistirma\n3 #Program Ciktisi\njava Main 9 8 1 #Derlenmis programi 9,8 ve 1 argumanlari ile calistirma\n1 #Program Ciktisi\njava Main 9 -4 1 #Derlenmis programi 9,-4 ve 1 argumanlari ile calistirma\n-4 #Program Ciktisi\n```\n\n* [Odev3_Faktoriyel](https://classroom.github.com/a/IWMvyac9) Program argumani olarak pozitif bir tamsayi alip, alinan bu sayinin faktoriyelini donduren bir program yaziniz. ***Son gonderim tarihi: 25 Mart 23:00***\n\n``` bash\njavac Main.java #Program Derleme\njava Main 5 #Derlenmis programi 5 degeri ile calistirma\n120 #Program Ciktisi\njava Main 1 #Derlenmis programi 1 degeri ile calistirma\n1 #Program Ciktisi\njava Main 0 #Derlenmis programi 0 degeri ile calistirma\n1 #Program Ciktisi\njava Main 3 #Derlenmis programi 6 degeri ile calistirma\n6 #Program Ciktisi\n```\n\n### Metin Dosyasindaki Degerleri Diziye Aktarma\n\nEliminiz 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.\n\n`5 6 7 8 9 4 3 5 4 3`\n\nBu 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. \n\n```java\nimport java.io.FileReader;\nimport java.util.*;\n\npublic class Main {\n    public static void main(String[] args){\n        int[] elems = ReadIntArrayFromFile(\"list.txt\");\n        int i = 1;\n        for (int v : elems){\n            System.out.println(\"Dosyadaki \" + i  + \". tam sayi \" + v + \"'dir.\");\n            i++;\n        }\n    }\n\n    public static int[] ReadIntArrayFromFile(String path){\n        List\u003cInteger\u003e intList = new ArrayList\u003cInteger\u003e();\n        Scanner sc;\n        try {\n            sc = new Scanner(new FileReader(path)).useDelimiter(\"\\\\s+\");\n        }\n        catch(Exception ex){\n            return null;\n        }\n\n        while (sc.hasNext()) {\n            String token = sc.next();\n            int num = Integer.parseInt(token);\n            intList.add(num);\n        }\n\n        int[] intArray = new int[intList.size()];\n        int ind = 0;\n        for (Integer v:intList){\n            intArray[ind++] = v.intValue();\n        }\n        return intArray;\n    }\n\n}\n```\n\nYukaridaki programin ciktisi:\n\n```bash\nDosyadaki 1. tam sayi 5'dir.\nDosyadaki 2. tam sayi 6'dir.\nDosyadaki 3. tam sayi 7'dir.\nDosyadaki 4. tam sayi 8'dir.\nDosyadaki 5. tam sayi 9'dir.\nDosyadaki 6. tam sayi 4'dir.\nDosyadaki 7. tam sayi 3'dir.\nDosyadaki 8. tam sayi 5'dir.\nDosyadaki 9. tam sayi 4'dir.\nDosyadaki 10. tam sayi 3'dir.\n```\n\nAsagida bu metodu kullanan baska bir kod ve bu kodun terminal ciktisi verilmektedir. Verilen kod komut satiri argumani olarak alinan dosyadaki sayilarin toplamini ekrana yazdirmaktadir.\n\n```java\nimport java.io.FileReader;\nimport java.util.*;\n\npublic class Main {\n    public static void main(String[] args){\n       int[] arr = ReadIntArrayFromFile(args[0]);\n       int sum = 0;\n       for (int i = 0; i \u003c arr.length; i++){\n           sum += arr[i];\n       }\n       System.out.println(sum);\n    }\n\n    public static int[] ReadIntArrayFromFile(String path){\n        List\u003cInteger\u003e intList = new ArrayList\u003cInteger\u003e();\n        Scanner sc;\n        try {\n            sc = new Scanner(new FileReader(path)).useDelimiter(\"\\\\s+\");\n        }\n        catch(Exception ex){\n            return null;\n        }\n\n        while (sc.hasNext()) {\n            String token = sc.next();\n            int num = Integer.parseInt(token);\n            intList.add(num);\n        }\n\n        int[] intArray = new int[intList.size()];\n        int ind = 0;\n        for (Integer v:intList){\n            intArray[ind++] = v.intValue();\n        }\n        return intArray;\n    }\n}\n```\n\n```bash\ncat listem.txt #cat komutu ile dosya icerigini ekrana yazdirabilirsiniz\n1 3 5 89 -9 87 34\njavac Main.java #Yukaridaki kodu derlemek icin terminale yazdigimiz komut\njava Main.class listem.txt #Derlenmis programi listem.txt argumani ile calistirma\n210 #Calistirdigimiz programin ciktisi\n```\n\n### Yeni Odevler (Odev Verilme Tarihi: 28 Mart 2022)\n\nBu odevleri kodlayabilmeniz icin `ReadIntArrayFromFile` metodunu kullanmaniz gerekmektedir. Sablon kodlarda size hazir verilen bu metodun kodlari ile oynamayiniz ve herhangi bir degisiklik yapmayiniz!\n\n* [Odev4 DiziCarpim](https://classroom.github.com/a/Y5yCjGxG) Arguman olarak icinde tamsayilarin saklandigi ve bu sayilarin bosluk karakteri ile birbirlerin ayrildigi bir metin dosyasinin konumunu (path, yol, dosya ismi) alan ve bu dosyadaki sayilarin carpimini ekrana yazdiran bir program yaziniz. Metin dosyasi bos bir dosya ise (icinde hic tamsayi bulunmazsa program ekrana 1 (carpma isleminin etkisiz elemani) yazdirmalidir. ***Son gonderim tarihi: 3 Nisan 2022 23:00***\n\n```bash\ncat list.txt\n1 5 6 9 9 -3\njavac Main.java\njava Main list.txt\n-7290\n```\n\n```bash\ncat deneme.txt\n1 1 1 -1 1 1 8 -4 9   2 2 1\njavac Main.java\njava Main deneme.txt\n1152\n```\n\n```bash\ncat deneme3.txt\n     #deneme3.txt dosyasinda sadece bosluk karakterleri var. \njavac Main.java\njava Main deneme3.txt\n1 # 1 carpma isleminin etkisiz elemanidir.\n```\n\n* [Odev5 DiziCiftOrtalama](https://classroom.github.com/a/hpXYd1dN) Arguman olarak icinde tamsayilarin saklandigi ve bu sayilarin bosluk karakteri ile birbirlerin ayrildigi bir metin dosyasinin konumunu (path, yol, dosya ismi) alan ve bu dosyadaki sayilardan cift olanlarin ortalamasini ekrana yazdiran bir program yaziniz. Listede cift sayi yoksa ortalama 0 olacagi icin ekrana sifir yazdirilmalidir. Tam sayilarin ortalamasi rasyonel sayi (double) cikabilir. Programiniz kodlarken bu durumu goz onunde bulundurunuz! ***Son gonderim tarihi: 3 Nisan 2022 23:00***\n\n```bash\ncat a.txt\n1 4 6 9 9 -3\njavac Main.java\njava Main a.txt\n5\n```\n\n\n\n```bash\ncat deneme.txt\n0 0 0 0 1 1 8 -4 9 2 0 0\njavac Main.java\njava Main deneme.txt\n0.666\n```\n\n\n```bash\ncat cift.txt\n1 6 4 4\njavac Main.java\njava Main cift.txt\n4.666\n```\n\n* [Odev6 DiziFark](https://classroom.github.com/a/Kw0B3ymL) Arguman olarak icinde tamsayilarin saklandigi ve bu sayilarin bosluk karakteri ile birbirlerin ayrildigi bir metin dosyasinin konumunu (path, yol, dosya ismi) alan ve bu dosyadaki sayilardan en buyugu ile en kucugu arasindaki farki `max - min` ekran yazdiran bir program yaziniz. Dosyadaki en kucuk ve en buyuk sayi ayni sayi program ekrana 0 yazdirmalidir. Ayni sekilde arguman olarak alinan dosyada herhangi bir sayi bulunmuyorsa program ekrana 0 yazdirmalidir.  ***Son gonderim tarihi: 3 Nisan 2022 23:00***\n\n```bash\ncat a.txt\n1 4 6 9 9 -3\njavac Main.java\njava Main a.txt\n12 #9 - (-3)\n```\n\n\n\n```bash\ncat deneme.txt\n1 1 6 7 5 8 8 8 1 \njavac Main.java\njava Main deneme.txt\n7 # 8 - 1\n```\n\n\n```bash\ncat cift.txt\n4 4 4 4 4\njavac Main.java\njava Main cift.txt\n0 #4 - 4\n```\n\n### Vize Uygulama Sorulari ve Cozumleri\n\n* [Gunduz Sorusu](https://gist.github.com/gusanmaz/1d113e4ce797bd9504531e3621fbef76)\n* [Gunduz Cozumu](https://gist.github.com/gusanmaz/848659b167877875ed00c931e0e7fc95)\n* [Gece Sorusu](https://gist.github.com/gusanmaz/b930c94bc2170bc2a78719054b6e81c2)\n* [Gece Cozumu](https://gist.github.com/gusanmaz/5c2ca4dfd2e4da377dbb44ae33519b40)\n\n### 9 Mayis 2022 (Odev ve Proje Degerlendirmeleri)\n\n* 4., 5. ve 5. odev ile 1. 2. proje gonderimleriniz degerlendirilmistir. \n* 1., 2. ve 3. odev ile ilgili not degerlendirme tablolari guncellenmistir.\n* [Notlariniz gormek icin tiklayiniz!](https://github.com/gusanmaz/BMB212_Algorithms/blob/main/grades.md)\n\n## Trafik (22 Mayis 2022)\n\n![trafik_22_mayis](images/trafik_22_mayis.png)\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusanmaz%2Fbmb212_algorithms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgusanmaz%2Fbmb212_algorithms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgusanmaz%2Fbmb212_algorithms/lists"}