Jak poprawić mój kod?

0

Witam wszystkich.

Zaimplementowałem w c++ rozwiązanie dla następującego problemu :
Dana jest 2-wymiarowa tablica z liczbami typu int,znajdz element dla ktorego suma otaczajacych go elementow bedzie najwieksza.

Program co prawda działa aczkolwiek myślę że coś dałoby się poprawić dlatego też bardzo proszę o jakieś konstruktywne uwagi.

Oto kod :

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;


int wypelnij(int ** tab,int rozmiar)
{
    for(int j =0; j<rozmiar; j++)
    {
        for(int i =0; i<rozmiar; i++)
        {
            tab[j][i] = rand() % 10 + 1;
        }
    }
}

int wypisz(int ** tab,int rozmiar)
{
    for(int j = 0; j<rozmiar; j++)
    {
        for(int i =0; i<rozmiar; i++)
        {
            cout<<tab[j][i]<<" ";
        }
        cout<<endl;
    }
}




int main()
{
    srand(time(NULL));
    int N;
    cout<<"Podaj wielkosc tablicy"<<endl;
    cin>>N;

    int **tablica = new int* [N];
    for(int i = 0; i<N; i++)
    {
        tablica[i] = new int [N];
    }
    wypelnij(tablica,N);
    wypisz(tablica,N);


    int maks_suma,suma;
    maks_suma = suma = 0;
    int x,y;

    for(int i =0; i<N; i++)
    {

        for(int j = 0; j<N; j++)
        {
            suma = 0;
            if(i-1>=0)suma += tablica[i-1][j];
            if(i+1<N)suma += tablica[i+1][j];

            if(j+1<N)suma += tablica[i][j+1];
            if(j-1>=0)suma += tablica[i][j-1];

            if(i-1>=0 && j-1>=0)suma += tablica[i-1][j-1];
            if(i+1<N && i+1<N)suma += tablica[i+1][j+1];

            if(i-1>=0 && j+1<N)suma += tablica[i-1][j+1];
            if(i+1<N && j-1>=0)suma += tablica[i+1][j-1];

            if(suma>maks_suma)
            {
                x=i;
                y=j;
                maks_suma = suma;
            }
        }

    }

    cout<<"Element dla ktorego suma otaczajacych go elementow jest najwieksza ma wartosc : "<<tablica[x][y]<<"\n jego wspolrzedne to x : "<<x<<" i y : "<<y<<" a suma jest rowna : "<<maks_suma<<endl;



    for(int i = 0; i<N; i++)
    {
        delete tablica[i];
    }
    delete tablica;

}

Z góry dziękuje wszystkim którzy poświęcą chociaż minutę na jakąś konstruktywną krytykę i pozdrawiam :)

1
int **tablica = new int* [N];
    tablica[i] = new int [N];

    delete tablica[i];
delete tablica;

Skoro tworzyłeś przez new[], to musisz usuwać przez delete[].

0

jest niezle

algorytmu na znalazenie sasiednich nie wymyslilem nic lepszego ALE

ja bym przerobil program na pewno

  1. z tablic na vectory (tablic nikt nie uzywa)
    2) zamiast new skorzystal z c++11 (make_unique)
  2. podzielibym jeszcze program na funkcje. Main powinno miec na dobra sprawe jak najmniej instrukcji. Pamietaj ze funkcje maja byc atomowe.

1 użytkowników online, w tym zalogowanych: 0, gości: 1