• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Tablice - wczytywanie wartości z klawiatury do danego programu, problem

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
3,190 wizyt
pytanie zadane 18 listopada 2015 w C i C++ przez fusemul Użytkownik (710 p.)
zamknięte 19 listopada 2015 przez event15

Witam, mam problem z moim programem. Wykonuję zadanie na studia na podstawie tego: http://sasni.eu/archives/162-badania-operacyjne-zagadnienia-transportowe-solver.html i zrobiłem program, który rozwiązuje to metodą kąta polnocno zachodniego. Zrobilem to jednak tylko dla z gory okreslonej ilosci kolumn i wierszy. Chcialbym jednak, zeby ta ilosc zostala wczytywana z klawiatury i tu pojawia sie problem. Ogladalem filmy pana Miroslawa, jednak nie udaje mi sie zastosowac wskaznikow w programie(a chyba tym sposobem powinno to zostac rozwiazane?).
probowalem tez po prostu dodac zmienne int w (jako wiersze) i int k(kolumny), lecz wtedy przy odpelniu program sie wysypuje.
Probowalem tez za pomoca wskaznika w nastepujacy sposob:

int *x; //tablica kosztow
    x=new int [ilew];
    x=new int [ilek];

ale niestety wyskakuje blad : invalid types int[int] for array subscript

 

oto caly moj kod programu: (dzialajaca wersja, jednak z odgorna wielkoscia tabeli)

#include <iostream>

using namespace std;

int main()
{
    int x[3][4]; //tablica kosztow
    int b[4]; //tablica zapotrzebowan piekarn
    int a[3]; //tablica oferowanych dostaw przez magazyny
    int nowa[3][4];//tablica do ktorej beda wstawiane optymalne wielkosci
    cout<<"wstaw do tabeli jednostkowe koszty transportu "<<endl;
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<4; j++)
        {
            cout<<"podaj wartosc x["<<i<<"]["<<j<<"] :";
            cin>>x[i][j];
            cout<<endl;
        }
    }
    cout<<"podaj oferowane miesieczne wielkosci dostaw przez kolejne magazyny ( w tonach)"<<endl;
    for(int i=0; i<3; i++)
    {
        cout<<"podaj a["<<i<<"]:";
        cin>>a[i];
        cout<<endl;
    }
    cout<<"Podaj zapotrzebowanie piekarn (w tonach): "<<endl;
    for(int j=0; j<4; j++)
    {
        cout<<"podaj b["<<j<<"]:";
        cin>>b[j];
        cout<<endl;
    }

    cout<<"Tablica kosztow "<<endl;
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<4; j++)
        {
            cout<<x[i][j]<<" ";

        }
        cout<<endl;
    }

    cout<<"Miesieczne wielkosci dostaw oferowane przez kolejne magazyny: "<<endl;

     for(int i=0; i<3; i++)
    {
        cout<<a[i]<<" ";

    }
    cout<<endl;

    cout<<"Miesieczne zapotrzebowanie piekarn w tonach: "<<endl;
     for(int j=0; j<4; j++)
    {
        cout<<b[j]<<" ";

    }
    cout<<endl;
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<4; j++)
        {
            if (b[j]<=a[i])
            {
                nowa[i][j]=b[j];
                a[i]=a[i]- b[j];
                b[j]=0;


            }
            else {
                    nowa[i][j]=a[i];
                    b[j]=b[j]-a[i];
                    a[i]=0;

            }

        }
    }

    cout<<"nowa tablica - metoda kata polnocno-zachodniego "<<endl;
    for(int i=0; i<3; i++)
    {
        for(int j=0; j<4; j++)
        {
            cout<<nowa[i][j]<<" ";

        }
        cout<<endl;
    }
    int suma=0;

    for(int i=0; i<3; i++)
    {
       for(int j=0; j<4; j++)
       {
            if(nowa[i][j]!=0)
            suma=suma+nowa[i][j]*x[i][j];

       }
        cout<<endl;
    }





    cout<<"Przy nastepujacym rozwiazaniu koszty to:  "<<suma;

    return 0;
}

 

Dziekuje za pomoc
 

komentarz zamknięcia: rozwiązany problem

2 odpowiedzi

+2 głosów
odpowiedź 19 listopada 2015 przez dariusz Obywatel (1,800 p.)
wybrane 19 listopada 2015 przez fusemul
 
Najlepsza

Kluczem do rozwiązania twojego problemu jest znajomość wskaźników. Zeby stworzyc dynamicznie alokowana tablica musimy stworzyc zmienna wskaznikowa i zaalokowac w niej dana ilosc intow.
 

	int *tab;//wskaznik na wartosc typu int

	int x=9;

	tab = new int[x];

	delete[] tab;

Tablice dwuwymiarowe to w c++ tablice wskaznikow. Czyli jeśli chcemy zaalokowac tablice 3x4 intow potrzebujemy najpierw stworzyc podwojny wskaznik na int. (int** macierz;) Teraz musimy przypisac do niego ilosc pojedynczych wskaznikow na int. macierz = new int*[x]; Nastepnym krokiem jest przypisanie do każdego pojedynczego wskaznika tablicy intow. Robi się to w pętli, a wygląda to jak alokacja normalnej tablicy.

int ilek, ilew;
	int **x; //wskaznik na wskaznik na wartosc int(podwojny wskaznik na int)
	cin >> ilew;
	cout << endl;
	cin >> ilek;

	x = new int*[ilew];//przydzielenie do podwojnego wskaznika (ilew) wskaznikow na inta
	for (int i = 0; i < ilew;i++)
	{
		x[i] = new int[ilek];//przydzielenie do każdego pojedynczego wskaznika [ilek] intow
	}

Załącze obrazek, który powinien troche wyjaśnić sprawe.

komentarz 19 listopada 2015 przez draghan VIP (106,230 p.)

Miło widzieć przemyślaną i prawidłową odpowiedź. :) yes

Ach... W Twoim pierszym fragmencie kodu chochlik zamieszał... :P

komentarz 19 listopada 2015 przez dariusz Obywatel (1,800 p.)

Pod tym adresem jest to całkiem nieźle wyjaśnione: http://www.p-programowanie.pl/cpp/tablice-dynamiczne/

komentarz 19 listopada 2015 przez dariusz Obywatel (1,800 p.)
Mi taki rysunek wyjaśnił cały problem jak sam potrzebowałem to zrozumieć. spróbuj sobie zaalokowac tablice 3 wymiarową, wtedy na pewno zrozumiesz 2 wymiarowe.
komentarz 19 listopada 2015 przez fusemul Użytkownik (710 p.)
Dziekuje bardzo, teraz dziala i jest to dla mnie duzo jasniejsze :)
duzo nauki jeszcze przede mną, pozdrawiam :)
0 głosów
odpowiedź 18 listopada 2015 przez fusemul Użytkownik (710 p.)

zatrzymalem sie na tym momencie:
 

#include <iostream>


using namespace std;

int main()
{
    int ilek, ilew;
    int *x; //tablica kosztow
    cin>>ilew;
    cout<<endl;
    cin>>ilek;
    x=new int [ilew];
    x=new int [ilek];
    int b[4]; //tablica zapotrzebowan piekarn
    int a[3]; //tablica oferowanych dostaw przez magazyny
    int nowa[3][4];//tablica do ktorej beda wstawiane optymalne wielkosci



    cout<<"wstaw do tabeli jednostkowe koszty transportu "<<endl;
    for(int i=0; i<ilek; i++)
    {
        for(int j=0; j<ilew; j++)
        {
            cout<<"podaj wartosc x["<<i<<"]["<<j<<"] :";
            cin>>x[i][j];
            cout<<endl;
        }
    }
    cout<<"podaj oferowane miesieczne wielkosci dostaw przez kolejne magazyny ( w tonach)"<<endl;
    for(int i=0; i<ilek; i++)
    {
        cout<<"podaj a["<<i<<"]:";
        cin>>a[i];
        cout<<endl;
    }
    cout<<"Podaj zapotrzebowanie piekarn (w tonach): "<<endl;
    for(int j=0; j<ilew; j++)
    {
        cout<<"podaj b["<<j<<"]:";
        cin>>b[j];
        cout<<endl;
    }

    cout<<"Tablica kosztow "<<endl;
    for(int i=0; i<ilek; i++)
    {
        for(int j=0; j<ilew; j++)
        {
            cout<<x[i][j]<<" ";

        }
        cout<<endl;
    }

    cout<<"Miesieczne wielkosci dostaw oferowane przez kolejne magazyny: "<<endl;

     for(int i=0; i<ilek; i++)
    {
        cout<<a[i]<<" ";

    }
    cout<<endl;

    cout<<"Miesieczne zapotrzebowanie piekarn w tonach: "<<endl;
     for(int j=0; j<ilew; j++)
    {
        cout<<b[j]<<" ";

    }
    cout<<endl;
    for(int i=0; i<ilek; i++)
    {
        for(int j=0; j<ilew; j++)
        {
            if (b[j]<=a[i])
            {
                nowa[i][j]=b[j];
                a[i]=a[i]- b[j];
                b[j]=0;


            }
            else {
                    nowa[i][j]=a[i];
                    b[j]=b[j]-a[i];
                    a[i]=0;

            }

        }
    }

    cout<<"nowa tablica - metoda kata polnocno-zachodniego "<<endl;
    for(int i=0; i<ilek; i++)
    {
        for(int j=0; j<ilew; j++)
        {
            cout<<nowa[i][j]<<" ";

        }
        cout<<endl;
    }
    int suma=0;

    for(int i=0; i<ilek; i++)
    {
       for(int j=0; j<ilew; j++)
       {
            if(nowa[i][j]!=0)
            suma=suma+nowa[i][j]*x[i][j];

       }
        cout<<endl;
    }





    cout<<"Przy nastepujacym rozwiazaniu koszty to:  "<<suma;

    delete []x;

    return 0;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 835 wizyt
pytanie zadane 21 listopada 2020 w C i C++ przez TOWaD Mądrala (6,480 p.)
0 głosów
2 odpowiedzi 1,381 wizyt
pytanie zadane 27 listopada 2016 w C i C++ przez Kazik Nowicjusz (120 p.)
0 głosów
1 odpowiedź 353 wizyt
pytanie zadane 10 maja 2022 w Python przez Nightmare Nowicjusz (150 p.)

93,434 zapytań

142,429 odpowiedzi

322,662 komentarzy

62,797 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...