Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

siewca

PILNE C++

Rekomendowane odpowiedzi

Musze na poniedzialek napisac baze danych na zajecia na zalieczenie...

mam juz wiekszosc, ale nie wiem jak sie dodaje i usuwa elementy do/z tablicy...

Pomozcie!!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

przez wskaznik konstuujesz tablice poleceniem NEW

 

wskaznik = new char [100] np tak, tylko to przychodzi mi do glody... nie weim dokladnie o co chodzi... a kasuje sie delete :D tylko po przez wstaznik alokujesz dynamicznie pamiec, ale ja to nie jestem guru w C++, bo za duzo olewalem :D a teraz musze kuc :/

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

heh juz nie wazne - napisalem:)

i tak musialem wszystkie zmiany zapisac do pliku wiec troche mi to ulatwilo zadanie...:)

bo nie bardzo mi to chcialo dzialac jak tworzylem nowa tablice wszystko kopiowalem usuwalem stara i tworzylem ja od nowa o jeden wieksza...

cos mi nie dzialalo ale nie wiem czemu...chyba cos z tym kopiowaniem pochrzanilem...

a innego sposobu nie znalazlem...a moze ktos zna lepszy??

tzn znalazlem jedny...zapisywalem od razu zmiane do pliku - czyli dopisywalem element lub otwieralem plik tylko do zapisu(czyli czysci zawartosc) i zapisywalem do niego cala tablice z wyjatkiem elementu do usuniecia....

potem usuwalem tablice(zwalnialem pamiec) i tworzylem ja od nowa wczytujac plik...to juz napisalem wczesniej bo musialem to zrobic na poczatku programu...:)

jakos sobie sam poradzilem ale i tak dzieki za odpowiedzi:)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ciezko powiedziec dlaczego Ci to nie dzialalo bo niewiele napisales, np czy w tablicy trzymasz obiekty czy typy proste (int, float...)

natomiast co do samego pomyslu to byl poprawny choc bardzo nieefektywny. Lepiej w takiej sytuacji utworzyc na poczatku wieksza tablice niz ilosc elementow (ale wieksza nie o 1 ale np o 10 albo dwa razy) i dopiero jak jej pojemnosc sie wyczerpie to alokowac nowa wieksza (np znowu dwa razy wieksza od poprzedniej). Oczywiscie musisz jeszcze caly czas pamietac ile masz aktualnie elementow w tablicy i pilnowac aby nie bylo w niej dziur czyli jak cos usuwasz to automatycznie musisz przesunac wszystkie elementy lezace dalej w tablicy o jedna pozycje w tyl.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

no wlasnie mialem tez problem z tym usuwaniem... w zasadzie to wogole nie wiem jak destruktora uzywac...:(

niestety jestem bardzo poczatkujacy...

mialem klase

class wpis{

char tytul_org[100];

char tytul_pol[100];

char gatunek[20];

int ocena;

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

destruktor "uzywa sie" sam w momencie niszczenie obiektu i najlepiej w takiej sytuacji pozwalniac w nim wszystkie zarezerwowane zasoby. Ale trzeba uwazac przy takich operacjach na kilka "niespodzianek". Wszystko oczywiscie zalezy co robisz wczesniej z takimi obiektami. Jesli np wczesniej utworzyles kopie takiego obiektu jak podales ale byla to tzw plytka kopia czyli np w przypadku tablic nie kopiowales calych tablic a jedynie wskazniki do nich to jesli w destruktorze zwalniasz takie tablice to bedziesz mial problem bo w kopi obiektu pozostanie wskaznik do tablicy ktorej juz nie bedzie. To tylko jeden przyklad co moze sie zdarzyc przy takiej zabawie. Jak chcesz wiecej to poczytaj jakas dobra ksiazke o C++

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a czy moglby ktos napisac mi jak dla takiej klasy zwiekszyc o jeden element wielkosc tablicy(tej klasy) i zmniejszyc tez o jeden...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

gdyby to miałoby być w pascalu to jeszcze ale c++ to są podstawy u mnie dopiero:)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Korzystajac ze standardowych metod alokacji pamieci w C++ (new, delete) nie mozna zmieniac rozmiaru tablicy. Mozna to zrobic wracajac do korzeni (czyt. C) i uzywaniu malloc, realloc i free, lub tez przeladowania operatorow new i delete. Wspomniane operatory (new, delete) roznia sie od malloc i free tylko tym, ze uruchamiaja od razu konstruktor (new) i destruktor (delete) dla obiektu - ale to mozna zawsze zrobic recznie :-).

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Robienie bazy na tablicy - nawet dynamicznej jest nieefektywne. Czasem trudno znaleźć fragment wolnej pamięci o rozmiarze 500 x rekord. Łatwiej znaleźć 500 małych obszarów o rozmiarze 1 rekordu (lista)'

 

adres=(rekord*)malloc(500*sizeof(rekord)) czy jakoś tak i masz zadeklarowany obszar pamięci o rozmiarze 500 elementowej tablicy rekordów. Do elementów odwołujesz sie jak w zwykłej tablicy (adres[n]).

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a moglbys to napisac na konkretnym przykladzie - np tej klasy co na gorze?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nigdy nie robiłem takiego numeru z klasami. Ze strukturami tak, nie wiem, czy z klasami bedzie dobrze działało :-) Czy elementy klasy mogą być elementami tablicy?

 

wpis *tablica;

tablica =(wpis*)malloc(500*sizeof(wpis));

 

Zadeklaruje Ci obszar w pamięci o rozmiarze 500 elementów typu wpis.

 

tablica[12].tytul_org - odwołanie do polatytul_org 12 elementu tablicy.

 

To nie jest dobry sposób na baze danych. Tak sie programów nie pisze. U mnie miałbys 3-. :-)

 

Tak sobie jeszcze chwile pomyślałem nad tym zagadnieniem - jeżeli juz tablica to chyba najlepiej tablica wskaźników do elementów wpis. Odczytujesz każdy element z pliku, tworzysz mu "miejsce" w pamieci funkcja alloc a adres zapamiętujesz w tablicy.

 

[Edytowane: 23/1/2004 przez mieszek]

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Polecam poczytać o stl'u a szczególnie o kontenerze vector. Znaaaacznie upraszcza to używanie tablic o dynamicznych rozmiarach.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

W przypadku baz danych dużo lepsza strukturą byla by lista. Ma już klasę odpowiadającą za pojedyńczy "rekord". Dodać do niej adres następnego elementu i lista gotowa.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Hej,

 

Jak w C++ to latwo dosc,

map, vector, list, etc. i baza danych jak malina :)

 

Wiecej o tym w "Thinking in C++".

 

--

Kornel

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...