C# diziyi saat yönünde 90 derece çevirme (algoritma ve programlamaya giriş dersine yönelik)

Fermion

Hectopat
Katılım
27 Ekim 2020
Mesajlar
2.338
Makaleler
72
Çözümler
25
Üniversitelerde algoritma ve programlamaya giriş dersinin popüler sorularından birisi bu diziler ve dizileri çevirme. Özellikle bazı hocalar sorunun cevabını aşağıdaki çözümde olacak şekilde isteyebilir. Elbette bu cevabı daha kısa yazmak mümkün ama anlaşılması açısından böyle daha iyi olacağını düşündüm.

Soru tam olarak şu: satır ve sütün sayısını kullanıcının belirlediği iki boyutlu bir dizinin tüm elemanları bilgisayar tarafından rastgele doldurulduktan sonra bu diziyi saat yönünde 90 derece çevirip yeni diziye aktaran ve sonucu ekrana yazdıran konsol programını yazınız.

C#:
using System;

public class Dizis.
{
 public static void Main(string[] args)
 {
 //Kullanıcıdan Satır ve Sütün Değerlerini Alma.
 Console.Write("Satır sayısını gir: ");
 int gs = Convert.ToInt32(Console.ReadLine());
 Console.Write("Sütün sayısını gir: ");
 int gs2 = Convert.ToInt32(Console.ReadLine());

 //İki Boyutlu Dizileri Kullanıcının Belirttiği Sayı Aralıklarında Oluşturma.

 int[,] dizi = new int[gs,gs2];
 int[,] dizi2 = new int[gs,gs2];

 //Rastgele Sayı Nesnesi Oluşturma.
 Random rs = new Random();

 //Rastgele Tutulan Sayıları Diziye Aktarma.
 for(int s = 0; s<gs; s++)
 {
 for(int ss = 0; ss<gs2; ss++)
 {

 dizi[s,ss] = rs.Next(1,100);
 }
 }

 //Diziyi Saat Yönünde 90 Derece Çevirip Yeni Diziye Aktarma.
 for(int s = 0; s<gs; s++)
 {
 for(int ss = 0; ss<gs2; ss++)
 {

 dizi2[s,ss] = dizi[gs-1-ss,s];
 }
 }

 //Diziyi Ekrana Yazdırma.

 for(int s = 0; s<gs; s++)
 {
 for(int ss = 0; ss<gs2; ss++)
 {

 Console.Write(dizi2[s,ss]+" ");
 }
 Console.WriteLine();
 }

 }
}
 
Son düzenleyen: Moderatör:
Kodu çevirmedim fakat nasıl yapıldığına dair birkaç kod satırı bırakıyim, devamını geri kalan arkadaşlar tamamladıkları zaman bu kodu da çevirirler. 😁

Kod:
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main() {
  int rows, columns;

  cout << "6: ";
  cin >> rows;

  cout << "12: ";
  cin >> columns;
 
79oieu.jpg

Saat yönü mü yoksa tersi mi olacağını söylememişsiniz. Saat yönü seçtim. Transpoz alıp sonra dikey çevirmek rahat geldi.
İmplementasyonda hata yok sanırım. 2-3 tane denedim, yanlış görmediysem doğru şekilde döndürüyor.
Rastgele alınan değerleri görmeden değişmiş halini görmenin pek bir anlamı yok gibi.
Kod:
using System;

public class Dizis
{
  public static void Main(string[] args)
  {
    //Kullanıcıdan Satır ve Sütün Değerlerini Alma.
    Console.Write("Satır sayısını gir: ");
    int gs = Convert.ToInt32(Console.ReadLine());
    
    Console.Write("Sütün sayısını gir: ");
    int gs2 = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine();

    //İki Boyutlu Dizileri Kullanıcının Belirttiği Sayı Aralıklarında Oluşturma.
    int[,] dizi = new int[gs, gs2];
    int[,] dizi2 = new int[gs2, gs];
    
    //Rastgele Sayı Nesnesi Oluşturma.
    Random rs = new Random();

    //Rastgele Tutulan Sayıları Diziye Aktarma.
    for (int s = 0; s < gs; s++) {
      for (int ss = 0; ss < gs2; ss++) {
        dizi[s, ss] = rs.Next(1, 100);
      }
    }

    // transpose
    for (int s = 0; s < gs; s++) {
      for (int ss = 0; ss < gs2; ss++) {
        dizi2[ss, s] = dizi[s, ss];
      }
    }
    
    // horizontal flip
    int temp = 0;
    for (int s = 0; s < gs2; s++) {
      for (int ss = 0; ss < gs / 2; ss++) {
        temp = dizi2[s, ss];
        dizi2[s, ss] = dizi2[s, gs - ss - 1];
        dizi2[s, gs - ss - 1] = temp;
      }
    }
    
    //Diziyi Ekrana Yazdırma.
    for (int s = 0; s < gs; s++) {
      for (int ss = 0; ss < gs2; ss++) {
        Console.Write(dizi[s, ss] + " ");
      }
      
      Console.WriteLine();
    }
    Console.WriteLine();

    for (int s = 0; s < gs2; s++) {
      for (int ss = 0; ss < gs; ss++) {
        Console.Write(dizi2[s, ss] + " ");
      }
      
      Console.WriteLine();
    }
  }
}

Şu tip tavsiyelerde bulunabilirim.
Indentation. Değişken isimlendirme. İşaretlerden sonra boşluk bırakarak okunur kod yazmak. İnsanların sütünün sizi alakadar etmediğini öğrenmek. Her kelimenin ilk harfini büyük yazmamak. Öğrendiyseniz fonksiyon kullanmak. Yorum yazarken standarda sahip olmak.

C++ kodu istediğinizi görmüyorum.
 

Geri
Yukarı