Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ usuwanie elementów struktury.

Ins0maniaC 21 Sty 2015 15:49 1209 18
  • #1 21 Sty 2015 15:49
    Ins0maniaC
    Poziom 17  

    Brak bugów, ale nie działa. Podpowiedzi?

    Funkcja:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Wywołanie:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0 18
  • Pomocny post
    #2 21 Sty 2015 16:04
    leoha
    Poziom 16  

    Ins0maniaC napisał:
    Brak bugów, ale nie działa. Podpowiedzi?]

    Po pierwsze jak nie działa to oznacza, że ma bugi.
    Po drugie chociaż jedno zdanie co to ma robić i co próbujesz osiągnąć i definicja struktury (klasy?) "samochod" mogłaby zwiększyć szanse, że ktoś ci pomoże.

    Pierwsze co od razu sie rzuca w oczy... raz indeksujesz te tablice wskaźnikiem (iks), a raz wartością (*iks).

    1
  • #3 21 Sty 2015 16:13
    Ins0maniaC
    Poziom 17  

    Łap całość. Program krzyczał, żeby w inny sposób indeksować char i w inny int.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #4 21 Sty 2015 16:41
    ania13L
    Poziom 12  

    Z c++ nie jestem zbyt dobra wiec moge sie mylic ale pare rzeczy mi sie tu nie podoba.

    Z tego co mi sie rzucilo w oczy to np w linijce car.marka[*iks]=car.marka[*iks+1]; przypisujesz pod litere w nazwie marka kolejna litere. Powinienes jakos sie odwolac do kolejnego elementu w tablicy car (poprzez wskaznik albo uzywajac []) a nie do marki i wtedy przekopiowac nazwe marki cala.
    Nie do konca rozumiem tez co chcesz osiagac w ten sposob wywolujac ta funkcje - chyba przepisac wszystkie kolejne elemeny tablicy na element o jeden nizej? Ale to powinienes sadze inaczej wywolywac ta funkcje, np dac tam jako parametr "i", a pozniej w funkcji uzywac car[i].cena = car[i+1].cena (do kopiowania tablic liter uzyc funkcji strcpy na przyklad).

    1
  • #5 21 Sty 2015 17:57
    mpier
    Poziom 16  

    Witam,
    może przedstaw treść zadania, bo bardzo komplikujesz, a chyba nie o to chodzi. Nie próbowałeś trzymać samochodów w liście? Ew osobno samochodów, osobno marek i modeli? Co do przepisywania w lewo, nie możesz tak: bazza[i] = bazza[i +1] albo przesunąć w lewo całej pamięci od elementu i do końca? Bez sensu.

    0
  • Pomocny post
    #6 21 Sty 2015 19:04
    -psiak-
    Poziom 32  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    1
  • #7 22 Sty 2015 22:07
    Ins0maniaC
    Poziom 17  

    @-psiak-

    Ale jak to wprowadzić w funkcję? Bo koniecznie muszę przekazać to z funkcji, a mam problem z tą strukturą. Pomysły? Kompilator nie lubi zapisu struktura[i]

    0
  • #8 22 Sty 2015 22:13
    -psiak-
    Poziom 32  

    Tamto ma być zamiast tego:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Chcesz jedną instrukcję do funkcji włożyć czy co?

    0
  • Pomocny post
    #9 22 Sty 2015 23:05
    leoha
    Poziom 16  

    Tu jest tak dużo błędów, że nawet nie wiem jak zacząć.

    Podpowiedzi:
    - po pierwsze musisz indeksować swoją "bazę", a nie jej elementy tj:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    - funkcja do usuwania musi mieć dostęp do " całej bazy", żeby z niej usunąć, bo skąd ta biedna funkcja ma wiedzieć z jakiej tablicy usunąć
    - hint: usuwanie elementu tablicy najprościej zrobić podmieniając element, który chcemy usunąć na ostatni z tablicy i zmniejszamy ilość elementów w tablicy o jeden
    - hint2: C++, STL, std::vector<>
    - jak już ktoś wyżej wspomniał daj "treść zadania", bo chyba lekko przekombinowujesz.

    1
  • Pomocny post
    #10 23 Sty 2015 08:06
    leoha
    Poziom 16  

    Napisałem bardzo uproszczoną wersję tego co chcesz osiągnąć. Przeczytaj, zrozum, a później dodaj brakujące elementy - obsługę błędów, wyszukiwanie (3), ładowanie z pliku, ew. wydzielenie niektórych funkcjonalności do osobnych funkcji.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • #11 23 Sty 2015 14:08
    Ins0maniaC
    Poziom 17  

    Zrobione sposobem psiaka, faktycznie nie było sensu robić nowej funkcji dla 1 instrukcji. leoha- dzięki za chęci, ale nie będę przerabiał całego programu na vektory.

    0
  • #12 23 Sty 2015 22:00
    Ins0maniaC
    Poziom 17  

    Instrukcja działa, ale jest problem z zapisem zmienionej struktury do pliku, instrukcja zapisująca jest na końcu, ale nic się niestety nie zmienia. Cały kod:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #13 23 Sty 2015 22:12
    ania13L
    Poziom 12  

    W case '5' wychodzisz z programu (exit(0)) wiec kod dalej sie nie wykona.

    0
  • #14 23 Sty 2015 22:17
    Ins0maniaC
    Poziom 17  

    Gdzie zatem wstawić instrukcję zapisującą? Nie mam pomysłu :S

    0
  • Pomocny post
    #15 23 Sty 2015 22:22
    ania13L
    Poziom 12  

    To zalezy kiedy chcesz aby sie zapisywalo :)
    Jesli zawsze w momencie wychodzenia to mozesz w case '5' przed wyjsciem to dac. Mozesz tez w tym case '5' jakos przerwac petle for (ta nieskonczona - bys musial zmienic ta petle) to moze zostac to zapisywanie tam gdzie jest.

    0
  • #16 23 Sty 2015 22:34
    Ins0maniaC
    Poziom 17  

    Teraz coś dziwnego zaczęło dziać się z wczytywaniem nowych pojazdów. Jak wczytam auto to na miejscu w które miałby wejść program wstawia same 0, a pojazd ląduje w miejsce 1. Ogólnie od 3 i wyżej jest skopane. Wszystko jest skopane z wczytywaniem i usuwaniem, mam wrażenie, że zmienna wprowadzone działa nie tak jak powinna, ale nie wiem za bardzo jak to naprawić.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #17 23 Sty 2015 23:06
    -psiak-
    Poziom 32  

    Może wywal ten system("cls"); i podaj log z ekranu aby pokazać o co ci biega.

    0
  • Pomocny post
    #18 23 Sty 2015 23:08
    p.kaczmarek2
    Poziom 23  

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Tu masz błąd, bo np. wprowadzone może być równe na początku 10, ale jak wtedy będziesz chciał wprowadzić 5 następnych, to i będzie miało wartości od 0 do 5 i po prostu nadpiszesz te poprzednie. Powinieneś robić bazza+wprowadzone tam.

    1
  • #19 24 Sty 2015 12:42
    Ins0maniaC
    Poziom 17  

    -psiak- fakt, nawet nie wpadłem, żeby tak zrobić :D

    p.kaczmarek2 i ten właśnie zapis był źródłem błędów. Teraz wszystko działa jak trzeba, dziękuję bardzo.

    0