Jak poprawić mój kod?

2015-01-22 11:40

Rejestracja: 5 lat temu

Ostatnio: 5 lat temu

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 :)

Pozostało 580 znaków

2015-01-22 11:47

Rejestracja: 5 lat temu

Ostatnio: 1 miesiąc temu

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[].

Pozostało 580 znaków

2015-01-22 11:50

Rejestracja: 8 lat temu

Ostatnio: 4 dni temu

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)
3) podzielibym jeszcze program na funkcje. Main powinno miec na dobra sprawe jak najmniej instrukcji. Pamietaj ze funkcje maja byc atomowe.

edytowany 1x, ostatnio: fasadin, 2015-01-22 12:11
Pokaż pozostałe 5 komentarzy
zgodze sie. Tablice nadal sa uzywane, ale ogolnie zapewne w 95% nie sa potrzebne tablice ;) - fasadin 2015-01-22 13:18
@fasadin: to trochę kwestia przyjętej filozofii: czy opakowujemy wszystko w smartpointery, kontenery, czy machamy na to ręką i piszemy w C with classes. - Azarien 2015-01-22 13:29
Ale to nie to samo co atomowe. :-P - Endrju 2015-01-22 13:54
Atomowość oznacza dosłownie niepodzielność na pewnym poziomie abstrakcji. Na przykład dodanie produktu do koszyka dla klienta jest operacją atomową. - n0name_l 2015-01-22 13:58

Pozostało 580 znaków

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