Witam, szukam jakiegoś pomysłu na projekt z C. Podstawy mam, zrobiłem snake'a ale uważam to za mało ambitne. Macie może jakieś pomysły ? Konieczne jest użycie list dynamicznych, najlepiej drzew BST.
Program do obsługi bazy danych zapisanej w pliku tekstowym.
Dobrze, gdyby była jakaś grafika do tego tylko nie wiem dokladnie czego użyć odnosnie grafiki - jeszcze tego nie robilem.
@Blackboy: Jaka grafika? Mówisz o algorytmie w formie schematu blokowego?
Na github'ie masz kilka pomysłów z różnych kategorii.
amb00 napisał(a):
@Blackboy: Jaka grafika? Mówisz o algorytmie w formie schematu blokowego?
Miałem na myśli jakiś interfejs graficzny.
@Blackboy: Jedyne co mi przychodzi do głowy to GTK+ lub WinAPI. W C niezbyt często teraz się pisze programy z interfejsem graficznym.
amb00 napisał(a):
@Blackboy: Jedyne co mi przychodzi do głowy to GTK+ lub WinAPI. W C niezbyt często teraz się pisze programy z interfejsem graficznym.
Więc postawie na GTK+ podobno łatwiejsze dla nowicjusza może jeszcze jakieś pomysły na projekt ?
I pytanie, jak podłączyć plik jako baza danych, nigdy tego nie robiłem.
Nie musisz go jakoś specjalnie podłączyć do projektu. Wystarczy, że nauczysz się obsługi plików w C czyli FILE
etc... no i czeka Cię nauka wskaźników, bo taki chociażby fopen
zwraca wskaźnik. Warto wiedzieć jak to działa i co z tym później robić, ale jak znasz listy i drzewa to nie będzie to dla Ciebie problem.
No chyba, że mówimy o jakichś sqlach to nie wiem, bo do czegoś pisanego w C nigdy takiej bazy nie dopinałem.
@Blackboy: Jeśli nie wiesz jak to ogólnie ogarnąć, ale znasz C++, to zajrzyj do kodu jednego z moich programów: https://4programmers.net/Forum/Off-Topic/Oceny_i_recenzje/289753-kod_programu_na_zaliczenie Co prawda on używa gotowej implementacji tablicy dynamicznej, ale przedstawia jak przykładowo można zorganizować to wszystko.
amb00 napisał(a):
@Blackboy: Jeśli nie wiesz jak to ogólnie ogarnąć, ale znasz C++, to zajrzyj do kodu jednego z moich programów: https://4programmers.net/Forum/Off-Topic/Oceny_i_recenzje/289753-kod_programu_na_zaliczenie Co prawda on używa gotowej implementacji tablicy dynamicznej, ale przedstawia jak przykładowo można zorganizować to wszystko.
Dziś rano przeglądałem właśnie kod kory wysłałeś w linku, zaczynam działać w tym temacie. Już wiem jak podłączyć ten plik. Myślę że sobie poradzę, jak coś, będę pisał. Miłego dnia !
To może "system bazodanowy" typu klucz wartość.
- Przy pomocy BST zaimplementujesz mapę (jak BST to za mało, to dodaj balansowanie drzewa w postaci drzewa czerwono czarnego albo zrandomizowanego - treap).
- Zawartość drzewa będzie kopiowana do plików, które można odczytać podczas startu systemy aby zrekonstruować zawartość mapy.
- Do tego api wystawione po sockecie tcp/udp (na początek udp dla prostoty, wszytko jednowątkowe, potem można to wzbogacić).
- Proste komendy CRUD.
- Można też stworzyć narzędzie do gadania z owym systemem z poziomu linii poleceń.
Taki strasznie uproszczony redis.
nalik napisał(a):
To może "system bazodanowy" typu klucz wartość.
- Przy pomocy BST zaimplementujesz mapę (jak BST to za mało, to dodaj balansowanie drzewa w postaci drzewa czerwono czarnego albo zrandomizowanego - treap).
- Zawartość drzewa będzie kopiowana do plików, które można odczytać podczas startu systemy aby zrekonstruować zawartość mapy.
- Do tego api wystawione po sockecie tcp/udp (na początek udp dla prostoty, wszytko jednowątkowe, potem można to wzbogacić).
- Proste komendy CRUD.
- Można też stworzyć narzędzie do gadania z owym systemem z poziomu linii poleceń.
Taki strasznie uproszczony redis.
Niestety, jak dla mnie czarna magia
Blackboy napisał(a):
nalik napisał(a):
To może "system bazodanowy" typu klucz wartość.
- Przy pomocy BST zaimplementujesz mapę (jak BST to za mało, to dodaj balansowanie drzewa w postaci drzewa czerwono czarnego albo zrandomizowanego - treap).
- Zawartość drzewa będzie kopiowana do plików, które można odczytać podczas startu systemy aby zrekonstruować zawartość mapy.
- Do tego api wystawione po sockecie tcp/udp (na początek udp dla prostoty, wszytko jednowątkowe, potem można to wzbogacić).
- Proste komendy CRUD.
- Można też stworzyć narzędzie do gadania z owym systemem z poziomu linii poleceń.
Taki strasznie uproszczony redis.
Niestety, jak dla mnie czarna magia
Wbrew pozorom nie jest to trudne. Z niektórych rzeczy można zrezygnować. Chętnie mogę rozwinąć zagadnienia jakbyś chciał.
@nalik Jeśli chodzi o zagadnienia których nie rozumiem moja odpowiedź to - wszystkich. Oprócz BST które widziałem raz na oczy. Więc rozwijanie tych wszystkich zagadnień byłoby bardzo czasochłonne, pytanie czy chciałbyś się aż tak poświęcić w imię mojego projektu ?
Mam jeszcze pytanko. Nie wychodzi mi funkcja usuwająca całą liste. dynamicznie. Co jest nie tak ?
void usun(ulm *first, int c){
ulm *tmp = first;
while(tmp != NULL){
first = (*tmp).next;
free(tmp);
}
}
Nie działa, bo to kompletnie bez sensu.
Najpierw zwalniasz pamięć, potem sprawdzasz czy wskaźnik jest NULL (free()
nie ustawia wskaźnika na NULL), a potem odwołujesz się do zwolnionego wcześniej wskaźnika (UB), aby przeczytać adres następnego elementu i wczytać go do first
?