Yapamadığım final sorusu

Osman Kayan

Decapat
Katılım
20 Aralık 2020
Mesajlar
38
Daha fazla  
Cinsiyet
Erkek
Bu soru final sınavımızda sorulmuştu ve yapamamıştım. Hoca çözümlerini de atmadı. Bileniniz var mı?
 

Dosya Ekleri

  • Screenshot_20210207-105744_Google PDF Viewer.jpg
    Screenshot_20210207-105744_Google PDF Viewer.jpg
    158,2 KB · Görüntüleme: 126
Son düzenleyen: Moderatör:
Başta matrisi tutmak lazım sanmıştım ama galiba değil. Hocanız pek açık yazmamış. Madem yazdırılacak, neden fonkisyon bir şeyler döndürüyor mesela? Neyse, sizin de odan aşağı kalır yanınız yok zaten. Buyurun, iş yapan bir C++ kodu.

Kod:
#include <iostream>

using namespace std;

int* satirToplamiAl(int row, int col) {
    int** a = new int* [row];
    for (auto i{ 0 }; i < row; ++i)
        a[i] = new int[col];

    int* result = new int[row];

    auto sum{ 0 };

    for (auto i{ 0 }; i < row; ++i) {
        for (auto j{ 0 }; j < col; ++j) {
            cout << i + 1 << ", " << j + 1 << " konumlu elamani giriniz: ";
            cin >> a[i][j];
            sum += a[i][j];
        }

        result[i] = sum;
        sum = 0;
    }

    for (auto i{ 0 }; i < row; ++i) {
        cout << i + 1 << ". satirin toplami: " << result[i] << endl;
        delete[] a[i];
    }

    delete[] a;

    return result;
}


int main() {
    satirToplamiAl(2, 3);

    return 0;
}
 
Son düzenleme:
Başta matrisi tutmak lazım sanmıştım ama galiba değil. Hocanız pek açık yazmamış. Madem yazdırılacak, neden fonkisyon bir şeyler döndürüyor mesela? Neyse, sizin de odan aşağı kalır yanınız yok zaten. Buyurun, iş yapan bir c++ kodu.

Kod:
#include <iostream>

using namespace std;

int* satirToplamiAl(int row, int col) {
int** a = new int* [row];
for (auto i{ 0 }; i < row; ++i)
a[i] = new int[col];

int* result = new int[row];

auto sum{ 0 };

for (auto i{ 0 }; i < row; ++i) {
for (auto j{ 0 }; j < col; ++j) {
cout << i + 1 << ", " << j + 1 << " konumlu elamani giriniz: ";
cin >> a[i][j];
sum += a[i][j];
}

result[i] = sum;
sum = 0;
}

for (auto i{ 0 }; i < row; ++i) {
cout << i + 1 << ". satirin toplami: " << result[i] << endl;
delete[] a[i];
}

delete[] a;

return result;
}

int main() {
satirToplamiAl(2, 3);

return 0;
}

Teşekkürler, covid hastalağına yakalanıp hastaneye kaldırıldığımdan dolayı çok fazla ders çalışabilme vakti bulamadım. Kodu zaten sınav esnasında yazmıştım ama fonksyon kullanamamıştım tekrardan teşekkürler.
 
int* yani başka bir değişle int array'in ilk elemanın addressini döndürüyor. Sanki oluşturulan matrisi ya da satır toplamları yapılmış sonuç matrisini çıktı olarak istiyor.

Soruda saçma bir çok nokta mevcut. Neden her şey bir Fonksiyon/Method içerisinde yapılmak zorunda?
Eğer bu benim projem olsa bunu şu şekilde yapardım.
Java:
  public static void main(String[] args)
  {
    getRowSum(2,3);
  }

  public static int[] getRowSum(int row, int col)
  {
    int[][] matrix = createMatrix(row, col);
    int[] result = sumRowArray(matrix);
    System.out.println(Arrays.toString(result));
    return result;
  }

  public static int[] sumRowArray(int[][] matrix)
  {
    int[] result = new int[matrix.length];
    for (int i = 0; i < result.length; i++)
    {
      result[i] = sumArray(matrix[i]);
    }
    return result;
  }

  public static int sumArray(int[] row)
  {
    int sum = 0;
    for (int item : row)
    {
      sum += item;
    }
    return sum;
  }

  public static int[][] createMatrix(int row, int col)
  {
    if (row > 0 && col > 0)
    {
      int[][] createdMatrix = new int[row][col];
      for (int i = 0; i < row; i++)
      {
        for (int j = 0; j < col; j++)
        {
          String message = String.format("Please enter %d, %d th item", i, j);
          createdMatrix[i][j] = getNumberFromUser(message);
        }
      }
      return createdMatrix;
    } else
    {
      throw new IllegalArgumentException("row and col should greater than 0.");
    }
  }

  public static int getNumberFromUser(String message)
  {
    System.out.printf("%s: ", message);
    String input = scanner.nextLine().trim();
    try
    {
      int num = Integer.parseInt(input);
      return num;
    }
    catch (Exception ex)
    {
      System.err.println("\nIllegal user input! Try again.");
      return getNumberFromUser(message);
    }
  }
A function should do one thing, and only one thing.

Bu soru için tek method olması sorun değil ancak ileride satır değil sütun matris toplamına ihtiyacımız var denildiği zaman neredeyse tüm kodun tekrar yazılması gerekir.
 
Son düzenleme:

Yeni konular

Geri
Yukarı