logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C++ funkcja wyszukująca po wprowadzonych kryteriach.

Ins0maniaC 28 Gru 2014 20:26 2109 19
REKLAMA
  • #1 14265396
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    Witam. Zrobiłem program wczytujący i wyświetlający zawartość tablicy struktur (czy jakkolwiek się to nazywa). Teraz mam za zadanie: "Napisz funkcję pozwalającą wyszukać w bazie elementy o zadanych parametrach np. samochód marki FIAT, rocznik nie starszy niż 1990, o cenie z zadanego przedziału." Ma ktoś pomysł jak się za to zabrać?

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • Pomocny post
    #2 14265451
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Zacznij od wymyślenia zmiennych jakich potrzebujesz najlepiej w strukturze np.
    char mark[50];//pusty string marka nie ważna
    int rocznikOd;//0 od początku
    itd.
    Potem porównuj czyli pełno if.
  • REKLAMA
  • #3 14267232
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    W dobrym kierunku ide?

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #4 14267323
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Zastosuj zmienne liczbowe gdzie się da w obydwóch strukturach (np. rok,cena..).
    Ja bym zmienił strukturę programu np.
    do{
    	pokażOpcje();//1-dodaj samoch ,2-wyświetl wszystko,3-wyszukaj,4-exit
    	opcja=getch();
    	if(opcja==dodaj){
    		dodaj();
    	}
    	else if(opcja==wyszukaj){
    		warunki=pobierzWarunki()
    		foreach{ 
    			zgadzasie=poruwnaj(auto,warunki);
    			if(zgadzasie)wyświetl(auto);
    		}
    	}
    }while(opcja!=exit);	
  • #5 14267392
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    Za menu się zajmę w kolejnym programie, tutaj chcę tylko na szybko zrobić te wyszukiwanie. Pozmieniałem na zmienne liczbowe i sporo błędów zniknęło, ale jest błąd w samych argumentach funkcji.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #6 14267551
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Pierwsze pobierz parametry wyszukiwania a potem porównuj w pętli z wszystkimi autami.
    W funkcji porównywania wykrywaj tylko złe np;
    if(car.rokprodukcji>carr.maxrokprodukcji)return false;
    jeżeli dojdzie do końca to wyświetl info o aucie.
  • #7 14299570
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    Zrobione, po długiej przerwie wracam do roboty :P nadal są babole, nie w samej funkcji, ale wywołaniu.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #8 14299664
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Ja bym to zrobił mniej więcej tak:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #9 14300075
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    Zrobione Twoim pomysłem i faktycznie wyeliminowałem wszystkie błędy. Jednak nie wiem czy dobrze myślę, że strlen i strcmpy jest tylko dla typów char/string. Więc nie wiem jak działać z resztą, czy tak zostawić? Gdzieś musi być błąd, bo koniec końców wyszukanego auta nie wyświetla.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #10 14300114
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Np. if(carr.maxrokprodukcji<car.rokprodukcji)
    powinno być
    if(carr.maxrokprodukcji>0 && carr.maxrokprodukcji<car.rokprodukcji)return false;
    takie coś if(carr.maxprzebieg=0)
    1)to jest przypisanie porównanie jest ==
    2)zwróci Ci false a miało nie porównywać przy zerowym.
  • #11 14300181
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    Zrobione i działa, ale tylko wyszukując po marce i modelu mam wrażenie. Jak wpisuję jakieś kryteria co do np. roku produkcji to nie wyświetla.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #12 14300352
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Użyj debugera (breakpoint w funkcji porownajauto) i leć krokowo.
    Jeżeli nie masz debugera to rób logi np. przed if(strlen(carr.ppmarka)>0 && strcmp(carr.ppmarka,car.marka)!=0) return false;
    daj cout<<"carr.ppmarka:"<<carr.ppmarka<<"car.marka:"<<car.marka<<endl;
    i tak dla każdego ifa. Wtedy zobaczysz w czym problem.
  • #13 14300541
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    A syntax error in expression, near `if(strlen(carr.ppmodel)>0 && strcmp(carr.ppmodel,car.model)!=0) return false;'.

    A syntax error in expression, near `if(carr.minrokprodukcji>0 && carr.minrokprodukcji>car.rokprodukcji) return false;'.
  • #14 14314248
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    Jakby ktoś znalazł co jest nie tak byłbym bardzo wdzięczny, bo nie widzę co nie gra.
  • #15 14314278
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Pokaż kod z funkcji w której są błędy.
  • #16 14314287
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    Cały kod:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Sama funkcja:

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #17 14314366
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Nie mam pojęcia, u mnie się kompiluje.
  • #18 14314385
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    Z kompilacją jest wszystko OK, ale problem z działaniem. Próbując wpisać przykładowe dane do bazy nie można potem dobrze przeszukać. Jeśli wpiszę model i markę wszystko jest ok. Ale jak chcę ustawić na przykład minimalny próg roku produkcji program nie pokazuje danego pojazdu.
  • #19 14314415
    witoldwitoldowicz
    Poziom 28  
    Posty: 698
    Pomógł: 163
    Ocena: 60
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #20 14314807
    Ins0maniaC
    Poziom 17  
    Posty: 353
    Ocena: 10
    Wszystko śmiga, dziękuję bardzo :)

Podsumowanie tematu

✨ Użytkownik stworzył program w C++ do wczytywania i wyświetlania danych o samochodach w formie tablicy struktur. Został poproszony o napisanie funkcji, która umożliwi wyszukiwanie samochodów według określonych kryteriów, takich jak marka, rok produkcji i cena. W odpowiedziach zasugerowano użycie zmiennych liczbowych w strukturach oraz porównywanie wartości w pętli. Użytkownik wprowadził zmiany, aby poprawić działanie programu, jednak napotkał problemy z wyszukiwaniem według roku produkcji. Ostatecznie, po kilku poprawkach i sugestiach dotyczących debugowania, udało mu się rozwiązać problem i program działa poprawnie.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA