C/C++ C dilinde diziler içinde sıralama

YazilimciPOH

Femtopat
Katılım
7 Ekim 2023
Mesajlar
7
Daha fazla  
Cinsiyet
Erkek
C:
#include <stdio.h>
#include <stdlib.h>

int main () {

    char isim[2][3][20];
   
    int i,j,p,gecicibellek,k,l;
   
    for (i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d. Bankanin %d. calisaninin ismini giriniz:",i+1,j+1);
            scanf("%s",&isim[i][j]);
        }
    }
   
    printf("Calisan isimleri sirasiyla:\n");
    for (i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%s\n",isim[i][j]);
        }
       
    }  
    printf("seklindedir...\n\n\n\n");
   
    printf("Bankanizin elemanlarinin calisma surelerini de girmeniz gerekmektedir.\n\n\n");
   
    int calisankidem[2][3];
   
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("%d. Bankanin %d. Elemani olan %s isimli personeli kac aydir bankanizda calismakta ?\n:",i+1,j+1,isim[i][j]);
            scanf("%d",&calisankidem[i][j]);
        }
    }
   
   
   
   
   
       
   
    while(1)
    {

    char a,b,c,d,menusecim;
    int gecicibellek;
   
   
   
    printf("\n\nBu personeller hakkinda ne ogrenmek istersiniz ?\nMenudeki seceneklerden birini seciniz...\n");
    printf("a-)Kidem Sureleri\nb-)Kideme gore mevcut maaslari\nc-)Kideme gore siralama\nd-)Menuden cikis\n:");
    scanf("%c",&menusecim);
   
    if(menusecim=='a')
    {
        for(i=0;i<2;i++)
        {
            for(j=0;j<3;j++)
            {
                printf("%d. Bankanin %d. Personeli olan %s isimli calisanin kidem suresi: %d ay\n",i+1,j+1,isim[i][j],calisankidem[i][j]);
            }
        }
       
       
    }
   
    if (menusecim=='b')
    {
        float bas_maas;
        printf("Bankaniza baslangic maasi kac TL dir ?\n"); scanf("%f",&bas_maas);
        printf("Yapilan hesaplar kidem yonetmeligine gore her 12 ayda yuzde bes maas artisi olacak sekilde hesaplanmistir...\n\n\n");
       
        for(i=0;i<2;i++)
        {
            for(j=0;j<3;j++)
            {
                if(calisankidem[i][j]>=12&&calisankidem[i][j]<24)
                {
                    float calisan_kidem_artis=bas_maas*0.05+bas_maas;
                    printf("%d.Bankadaki %d.Calisan olan %s isimli personelin maasi %.2f TL dir.\n",i+1,j+1,isim[i][j],calisan_kidem_artis);
                }
                else if (calisankidem[i][j]>=24 && calisankidem[i][j]<36)
                {
                    float calisan_kidem_artis=bas_maas+bas_maas*0.1;
                    printf("%d.Bankadaki %d.Calisan olan %s isimli personelin maasi %.2f TL dir.\n",i+1,j+1,isim[i][j],calisan_kidem_artis);
                }
                else (calisankidem[i][j]>=36&&calisankidem[i][j]<48)
                ;{
                    float calisan_kidem_artis=bas_maas+bas_maas*0.15;
                    printf("%d.Bankadaki %d.Calisan olan %s isimli personelin maasi %.2f TL dir.\n",i+1,j+1,isim[i][j],calisan_kidem_artis);
                }
            }
        }

       
    }
    if(menusecim=='c')
    {
        for(i=0;i<2;i++)
        {
              for(j=0;j<3-1;j++)
                {
                    if(calisankidem[i][j]<calisankidem[i][j+1])
                {
                    gecicibellek=calisankidem[i][j];
                    calisankidem[i][j]=calisankidem[i][j+1];
                    calisankidem[i][j+1]=gecicibellek;
                   
                }
                }
           
        }
       
        for(i=0;i<2;i++)
        {
            for(j=0;j<3;j++)
            {
                printf("%d ",calisankidem[i][j]);
            }
           
        }
       
   
    }
   
   
   
   
   
   
   


   
   
    }
   
   
   
   
   
    return 0 ;
}


Dizilerde sıralama olayı aklımı allak bullak etti,Kullanıcı menüden C yi seçtiği zaman kıdem sıralamasını veriyor program ama kesinlikle büyükten küçüğe yada küçükten büyüğe doğru değil.

Birde kullanıcıya sunulan menü bölümü 2 defa yazdırılıyor, nerede hatam bulamıyorum. Zaten mevcut mesleğimde programalamaya bakmam çok zor bir durumken,birde bu zımbırtıya koskoca 5 çalışmamı verdim,genede düzeltemedim.
 
Son düzenleyen: Moderatör:
Chat GPT de "Kodunuzda hata görünmüyor ancak böyle yapabilirsiniz" diyor, o kodu uyguluyorum ondada sonuç yok.

Yokmu anlayan bir babayiğit 🥲
Anlıyorum ama kodun refaktöringiyle uğraşmak eğlenceli değil. Çok fazla eksik/yanlış şey var. Pek çok anlayan kişi de bu yüzden mesaj atmıyor muhtemelen. Birazdan yazacağım şeyler için üslubumu hoş gör.

1. hatan, neden fonksiyon kullanmıyorsun? Bir ton karışıklık çıkmış, 2. hatan neden structure kullanmıyorsun. 3. hatan isimlendirmeler çok kötü. 4. hatan kodu rastgele yazdığın için bir noktada takibini kaybetmişsin. Toplamak zordu işin açığı.

Elimin boş zamanında yazdım. Muhtemelen geliştirilebilecek, error checking yapılabilecek noktaları vardır.

C:
#include <stdio.h>
#include <string.h>

#define BANKA_SAY 2
#define CALISAN_SAY 3

typedef struct {
  char isim[20];
  int kidem;
} Calisan;

typedef struct {
  Calisan calisanlar[CALISAN_SAY];
} Banka;

void calisanBilgileriniAl(Banka bankalar[BANKA_SAY]) {
  int i, j;
  for (i = 0; i < BANKA_SAY; i++) {
    printf("%d. Bankanin calisanlarinin bilgilerini giriniz:\n", i + 1);
    for (j = 0; j < CALISAN_SAY; j++) {
      printf("%d. calisanin ismini giriniz: ", j + 1);
      scanf("%s", bankalar[i].calisanlar[j].isim);

      printf("%d. calisanin kidemini giriniz: ", j + 1);
      scanf("%d", &bankalar[i].calisanlar[j].kidem);
    }
  }
}

void calisanBilgileriniGoster(Banka bankalar[BANKA_SAY]) {
  int i, j;
  printf("Calisan isimleri ve kidem suresi sirasiyla:\n");
  for (i = 0; i < BANKA_SAY; i++) {
    printf("%d. Banka:\n", i + 1);
    for (j = 0; j < CALISAN_SAY; j++) {
      printf("Calisan %d: Isim: %s, Kidem: %d ay\n", j + 1, bankalar[i].calisanlar[j].isim,
             bankalar[i].calisanlar[j].kidem);
    }
    printf("\n");
  }
}

void calisanlariIsmeGoreSiralama(Banka bankalar[BANKA_SAY]) {
  int i, j, k;
  Calisan temp;
  for (i = 0; i < BANKA_SAY; i++) {
    for (j = 0; j < CALISAN_SAY - 1; j++) {
      for (k = 0; k < CALISAN_SAY - j - 1; k++) {
        if (strcmp(bankalar[i].calisanlar[k].isim, bankalar[i].calisanlar[k + 1].isim) > 0) {
          temp = bankalar[i].calisanlar[k];
          bankalar[i].calisanlar[k] = bankalar[i].calisanlar[k + 1];
          bankalar[i].calisanlar[k + 1] = temp;
        }
      }
    }
  }
}

void kidemeGoreMaasHesaplama(Banka bankalar[BANKA_SAY], float bas_maas, float oran) {
  int i, j;
  printf("Bankaniza baslangic maasi: %.2f TL\n", bas_maas);
  printf("Kideme gore maaslar:\n");
  for (i = 0; i < BANKA_SAY; i++) {
    printf("%d. Banka:\n", i + 1);
    for (j = 0; j < CALISAN_SAY; j++) {
      float calisan_kidem_artis = bas_maas;
      if (bankalar[i].calisanlar[j].kidem >= 12 && bankalar[i].calisanlar[j].kidem < 24) {
        calisan_kidem_artis = bas_maas * (oran) + bas_maas;
      } else if (bankalar[i].calisanlar[j].kidem >= 24 && bankalar[i].calisanlar[j].kidem < 36) {
        calisan_kidem_artis = bas_maas + bas_maas * (oran * 2);
      } else if (bankalar[i].calisanlar[j].kidem >= 36 && bankalar[i].calisanlar[j].kidem < 48) {
        calisan_kidem_artis = bas_maas + bas_maas * (oran * 3);
      }
      printf("Calisan %d: Isim: %s, Maas: %.2f TL\n", j + 1, bankalar[i].calisanlar[j].isim, calisan_kidem_artis);
    }
  }
}

void menuGoster() {
  printf("\n\n--- MENU ---\n");
  printf("1. Calisan bilgilerini goster\n");
  printf("2. Calisanlari isme gore sirala ve goster\n");
  printf("3. Kideme gore maas hesapla ve goster\n");
  printf("4. Cikis\n");
  printf("Seciminizi yapiniz: ");
}

int main() {
  Banka bankalar[BANKA_SAY];
  float bas_maas, oran;
  int secim;


  calisanBilgileriniAl(bankalar);
 
  int dummy;
  if(scanf("%d", &dummy) == EOF) {
    clearerr(stdin);
  }
 
  do {
    menuGoster();
    scanf("%d", &secim);

    
    // test
    switch (secim) {
      case 1:
        calisanBilgileriniGoster(bankalar);
        break;
      case 2:
        calisanlariIsmeGoreSiralama(bankalar);
        printf("\nCalisanlar isme gore siralandi:\n");
        calisanBilgileriniGoster(bankalar);
        break;
      case 3:
        printf("\nBankaniza baslangic maasi kac TL dir? ");
        scanf("%f", &bas_maas);
        printf("\nBankanizda kidem orani kactir? ");
        scanf("%f", &oran);
        kidemeGoreMaasHesaplama(bankalar, bas_maas, oran);
        break;
      case 4:
        printf("Program sonlandiriliyor...\n");
        break;
      default:
        printf("Gecersiz secim! Lutfen tekrar deneyiniz.\n");
    }
  } while (secim != 4);

  return 0;
}
 
Anlıyorum ama kodun refaktöringiyle uğraşmak eğlenceli değil. Çok fazla eksik/yanlış şey var. Pek çok anlayan kişi de bu yüzden mesaj atmıyor muhtemelen. Birazdan yazacağım şeyler için üslubumu hoş gör.

1. hatan, neden fonksiyon kullanmıyorsun? Bir ton karışıklık çıkmış, 2. hatan neden structure kullanmıyorsun. 3. hatan isimlendirmeler çok kötü. 4. hatan kodu rastgele yazdığın için bir noktada takibini kaybetmişsin. Toplamak zordu işin açığı.

Elimin boş zamanında yazdım. Muhtemelen geliştirilebilecek, error checking yapılabilecek noktaları vardır.

C:
#include <stdio.h>
#include <string.h>

#define BANKA_SAY 2
#define CALISAN_SAY 3

typedef struct {
  char isim[20];
  int kidem;
} Calisan;

typedef struct {
  Calisan calisanlar[CALISAN_SAY];
} Banka;

void calisanBilgileriniAl(Banka bankalar[BANKA_SAY]) {
  int i, j;
  for (i = 0; i < BANKA_SAY; i++) {
    printf("%d. Bankanin calisanlarinin bilgilerini giriniz:\n", i + 1);
    for (j = 0; j < CALISAN_SAY; j++) {
      printf("%d. calisanin ismini giriniz: ", j + 1);
      scanf("%s", bankalar[i].calisanlar[j].isim);

      printf("%d. calisanin kidemini giriniz: ", j + 1);
      scanf("%d", &bankalar[i].calisanlar[j].kidem);
    }
  }
}

void calisanBilgileriniGoster(Banka bankalar[BANKA_SAY]) {
  int i, j;
  printf("Calisan isimleri ve kidem suresi sirasiyla:\n");
  for (i = 0; i < BANKA_SAY; i++) {
    printf("%d. Banka:\n", i + 1);
    for (j = 0; j < CALISAN_SAY; j++) {
      printf("Calisan %d: Isim: %s, Kidem: %d ay\n", j + 1, bankalar[i].calisanlar[j].isim,
             bankalar[i].calisanlar[j].kidem);
    }
    printf("\n");
  }
}

void calisanlariIsmeGoreSiralama(Banka bankalar[BANKA_SAY]) {
  int i, j, k;
  Calisan temp;
  for (i = 0; i < BANKA_SAY; i++) {
    for (j = 0; j < CALISAN_SAY - 1; j++) {
      for (k = 0; k < CALISAN_SAY - j - 1; k++) {
        if (strcmp(bankalar[i].calisanlar[k].isim, bankalar[i].calisanlar[k + 1].isim) > 0) {
          temp = bankalar[i].calisanlar[k];
          bankalar[i].calisanlar[k] = bankalar[i].calisanlar[k + 1];
          bankalar[i].calisanlar[k + 1] = temp;
        }
      }
    }
  }
}

void kidemeGoreMaasHesaplama(Banka bankalar[BANKA_SAY], float bas_maas, float oran) {
  int i, j;
  printf("Bankaniza baslangic maasi: %.2f TL\n", bas_maas);
  printf("Kideme gore maaslar:\n");
  for (i = 0; i < BANKA_SAY; i++) {
    printf("%d. Banka:\n", i + 1);
    for (j = 0; j < CALISAN_SAY; j++) {
      float calisan_kidem_artis = bas_maas;
      if (bankalar[i].calisanlar[j].kidem >= 12 && bankalar[i].calisanlar[j].kidem < 24) {
        calisan_kidem_artis = bas_maas * (oran) + bas_maas;
      } else if (bankalar[i].calisanlar[j].kidem >= 24 && bankalar[i].calisanlar[j].kidem < 36) {
        calisan_kidem_artis = bas_maas + bas_maas * (oran * 2);
      } else if (bankalar[i].calisanlar[j].kidem >= 36 && bankalar[i].calisanlar[j].kidem < 48) {
        calisan_kidem_artis = bas_maas + bas_maas * (oran * 3);
      }
      printf("Calisan %d: Isim: %s, Maas: %.2f TL\n", j + 1, bankalar[i].calisanlar[j].isim, calisan_kidem_artis);
    }
  }
}

void menuGoster() {
  printf("\n\n--- MENU ---\n");
  printf("1. Calisan bilgilerini goster\n");
  printf("2. Calisanlari isme gore sirala ve goster\n");
  printf("3. Kideme gore maas hesapla ve goster\n");
  printf("4. Cikis\n");
  printf("Seciminizi yapiniz: ");
}

int main() {
  Banka bankalar[BANKA_SAY];
  float bas_maas, oran;
  int secim;


  calisanBilgileriniAl(bankalar);
 
  int dummy;
  if(scanf("%d", &dummy) == EOF) {
    clearerr(stdin);
  }
 
  do {
    menuGoster();
    scanf("%d", &secim);

   
    // test
    switch (secim) {
      case 1:
        calisanBilgileriniGoster(bankalar);
        break;
      case 2:
        calisanlariIsmeGoreSiralama(bankalar);
        printf("\nCalisanlar isme gore siralandi:\n");
        calisanBilgileriniGoster(bankalar);
        break;
      case 3:
        printf("\nBankaniza baslangic maasi kac TL dir? ");
        scanf("%f", &bas_maas);
        printf("\nBankanizda kidem orani kactir? ");
        scanf("%f", &oran);
        kidemeGoreMaasHesaplama(bankalar, bas_maas, oran);
        break;
      case 4:
        printf("Program sonlandiriliyor...\n");
        break;
      default:
        printf("Gecersiz secim! Lutfen tekrar deneyiniz.\n");
    }
  } while (secim != 4);

  return 0;
}
Cevabın ve uğraşın için çok teşekkür ederim,benim için kıymeti büyük bir cevaptı.

Henüz fonksiyonlar bölümünü öğrenmediğim için böyle bir şey yaptım,diziler bittikten sonra fonksiyonlara geçeceğim youtubede C dilini öğrenmek için takip ettiğim kanal bu yönde bir ilerleme yapmış.

Fonksiyonlara geçmeden şuana kadar öğrendiğim şeyleri hafiften harmanlayıp böyle birşey yapayım dedim. İsimlendirmelerde ve söylediğiniz diğer hataların hepsine dikkat edeceğim, switch case kullanmak ise aklıma gelmedi o çok mantıklı olurdu aslında. Tecrübesizliğime verin, aslında programda kafamı kurcalayan bir türlü oturmayan tek yer kullanıcının C yi seçtiği, kıdeme göre sıralama istediği bölüm. Onuda bu gece yapacağım, mesaim yeni bitti sabaha kadar devam bakalım yapamazsam atlayıp ileriki zamanlarda tekrar dönüş sağlarım bu konuya.
 

Yeni mesajlar

Geri
Yukarı