problem z c++

Potrzebujesz pomocy z C, C++, perl, python, itp.
skotik87
Posty: 98
Rejestracja: 05 kwietnia 2007, 00:20
Lokalizacja: Krakow

problem z c++

Post autor: skotik87 »

witam, mam taki maly problem. Zaczalem robic baze danych w c++ i dosc szybko sie nacialem. Oczywiscie wkleilem tylko to co jest wazne do rozwiazania mojego problemu.

Kod: Zaznacz cały

struct laptop
 {
	string marka;
	string model;
        double cena;
	int ilosc;
  };
void dodaj_do_bazy(laptop *lap,int n)
{
       	cout<<"Ile chcesz wczytac??\n";  /nie wiem jak powiazac to n z n przy wywolaniu
         cin>>n;
	for(int i=0;i<n;++i)
	{
             	cout<<"Podaj marke :\n";
		cin>>lap[i].marka;
		cout<<"Podaj model :\n";
		cin>>lap[i].model;
		cout<<"Podaj rok produkcji :\n";
		cin>>lap[i].cena;
		cout<<"Podaj cene samochodu :\n";
		cin>>lap[i].ilosc;
    	}
  }
int main()
{
 char wybor;
    do        
     {
      wybor=getch();
       switch (wybor)
        {
         case '4':   {                                                //n powinno byc licznikiem ile ma byc     
                        n= ??;                                     //wczytanych nowych elementow
      			laptop *lap = new laptop [n];      //zrobilem cos takiego
			dodaj_do_bazy(lap,n);               //ale na 100% jest to zle
			break;
                        }
         }
      }
        while (wybor!='7');
    return 0;
}
poki co chce zrobic wczytywanie jeszcze bez zapisywania do pliku, tylko "zgubilem sie" na wywolaniu tej funkcji, poprostu nie wiem jak to zrobic zeby dobrze powiazac zmienne w funkcji i przy wywolaniu. Nie lubie c++ ale coz zrobic.

Mam nadzieje ze ktos naprowadzi mnie na dobre rozwiazanie.
salmon
Beginner
Posty: 296
Rejestracja: 12 października 2007, 23:28
Lokalizacja: Gliwice/Bielsko-Biała

Post autor: salmon »

[quote="skotik87"]laptop *lap = new laptop [n]] Najpierw poczytaj o zakresach danych(czy jak to się tam nazywa), lap po wyjściu programu ze switcha jest niewidoczny, czyli masz wyciek pamięci. [quote="skotik87"]cout<<"Ile chcesz wczytac??\n"]Tego co chcesz zrobić z parametrem n nie za bardzo rozumiem to nie mogę pomóc. Napisz jak do czego Ci ta zmienna jest potrzebna
0dd
Beginner
Posty: 104
Rejestracja: 16 lipca 2007, 19:43
Lokalizacja: Nowy Sacz / Krakow

Post autor: 0dd »

Kod: Zaznacz cały

struct laptop
 {
    string marka;
    string model;
        double cena;
    int ilosc;
  };
void dodaj_do_bazy(laptop *lap,int n)
{
          
    for(int i=0;i<n;++i)
    {
                 cout<<"Podaj marke :\n";
        cin>>lap[i].marka;
        cout<<"Podaj model :\n";
        cin>>lap[i].model;
        cout<<"Podaj rok produkcji :\n";
        cin>>lap[i].cena;
        cout<<"Podaj cene samochodu :\n";
        cin>>lap[i].ilosc;
        }
  }
int main()
{
 char wybor;
    do       
     {
      wybor=getch();
       switch (wybor)
        {
         case '4':   {        
            cout<<"Ile chcesz wczytac??\n";  
          cin>>n;
                                       
                  laptop *lap = new laptop [n];   
            dodaj_do_bazy(lap,n);
            break;
                        }
         }
      }
        while (wybor!='7');
    return 0;
} 
mozesz takze tworzyc tablice w funkci dodaj_do_bazy i zwracac referencje. przy okzji lepiej wykorzystaj malloc do tworzenia tablicy bo przy duzym rozmiarze mozesz przepelnic stos.
salmon
Beginner
Posty: 296
Rejestracja: 12 października 2007, 23:28
Lokalizacja: Gliwice/Bielsko-Biała

Post autor: salmon »

0dd pisze:mozesz takze tworzyc tablice w funkci dodaj_do_bazy i zwracac referencje. przy okzji lepiej wykorzystaj malloc do tworzenia tablicy bo przy duzym rozmiarze mozesz przepelnic stos.
To jest C++, tu się używa STL-a, w tym przypadku szablonu vector. ¯adnych malloców :P
0dd
Beginner
Posty: 104
Rejestracja: 16 lipca 2007, 19:43
Lokalizacja: Nowy Sacz / Krakow

Post autor: 0dd »

jak ktos uzywa struct w c++ to moze i uzyc malloc (:
skotik87
Posty: 98
Rejestracja: 05 kwietnia 2007, 00:20
Lokalizacja: Krakow

Post autor: skotik87 »

Wlasnie jest taki problem ze z gory mam powiedziane co mam uzyc do robienia tej bazy i jak to ma mniej wiecej wygladac. Projekt na uczelnie :/ ja to inaczej bym zrobil, ale wole nie ryzykowac z tym prof, wystarcza mi kolosy z c++ na kartkach :shock:

chodzi mi o to co dopisal Odd. Tylko czy to jest dobry sposob na wywolanie tej funkcji??
mozesz takze tworzyc tablice w funkci dodaj_do_bazy i zwracac referencje
czy moglbys mi napisac jakis malutki przyklad jakby to wygladalo. z ledwoscia zalapalem wskazniki, a referencji juz nie dalem rady :/
Theq
Beginner
Posty: 140
Rejestracja: 16 kwietnia 2007, 19:00
Lokalizacja: Legnica

Post autor: Theq »

0dd pisze:jak ktos uzywa struct w c++ to moze i uzyc malloc (:
Tak sie sklada, ze w C++ struct sie praktycznie niczym nie rozni od class (rozni sie tylko domyslnym ustawieniem sekcji dostepu), wiec porownanie nietrafione. Po drugie, new w c++ to takie nowe malloc, wiec zamiana tego na malloc praktycznie nic nie zmieni. Po trzecie jak alokujesz pamiec do jakis celow, nie wazne czy przez new czy malloc to potem przydaloby sie ja zwolnic, w tym przypadku tak:

Kod: Zaznacz cały

delete [] lap]
0dd
Beginner
Posty: 104
Rejestracja: 16 lipca 2007, 19:43
Lokalizacja: Nowy Sacz / Krakow

Post autor: 0dd »

Theq pisze:Tak sie sklada, ze w C++ struct sie praktycznie niczym nie rozni od class (rozni sie tylko domyslnym ustawieniem sekcji dostepu)
troche sie jednak rozni, struct nie moze miec metod. klasa nie posiadajaca metod jest malo obiektowa a pozatym brak enkapsulacji.
Theq
Beginner
Posty: 140
Rejestracja: 16 kwietnia 2007, 19:00
Lokalizacja: Legnica

Post autor: Theq »

Nie, mylisz sie. Wszystko o czym mowisz jest w strukturze. Nastepnym razem chociaz sprawdz, zanim zaczniesz mieszac ludziom w glowie.
ponton
Beginner
Posty: 406
Rejestracja: 24 stycznia 2007, 01:40
Lokalizacja: Kalisz/Wroc³aw

Post autor: ponton »

czy moglbys mi napisac jakis malutki przyklad jakby to wygladalo.
Po prostu zwraca wskaźnik.

Kod: Zaznacz cały

laptop * dodaj_do_bazy(int n) 
{ 
    laptop *lap = new laptop[n];
    for(int i=0;i<n;++i)  { 
        cout<<"Podaj marke :\n"; 
        cin>>lap[i].marka; 
        cout<<"Podaj model :\n"; 
        cin>>lap[i].model; 
        cout<<"Podaj rok produkcji :\n"; 
        cin>>lap[i].cena; 
        cout<<"Podaj cene samochodu :\n"; 
        cin>>lap[i].ilosc; 
     } 
     return lap;   
} 

int main() 
{ 
   char wybor; 
   laptop *lap;   

   do { 
       wybor=getch(); 
       switch (wybor)  { 
          case '4': 
             {        
                 cout<<"Ile chcesz wczytac??\n";  
                 cin>>n; 
                                        
                 lap = dodaj_do_bazy(n); 
                 break; 
              } 
        } 
    } while (wybor!='7');

    delete [] lap; 
    return 0; 
}
ODPOWIEDZ