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

Jak poprawić błędy w kodzie sortowania w C na podstawie schematu?

syssc 14 Maj 2020 01:07 1260 11
REKLAMA
  • #1 18691591
    syssc
    Poziom 9  
    Posty: 5
    Ocena: 1
    Jak poprawić błędy w kodzie sortowania w C na podstawie schematu?

    Sam napisałem coś takiego i w sumie nie wiem gdzie może być błąd. Po komplikowaniu nadal nie wiem co ten program może robić:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    i w sumie nie wiem czy to jest dobrze i co dokładnie robi.
  • REKLAMA
  • #2 18691682
    chudybyk
    Poziom 32  
    Posty: 1537
    Pomógł: 196
    Ocena: 297
    syssc napisał:
    i w sumie nie wiem czy to jest dobrze i co dokładnie robi.

    A czy wiesz przynajmniej co powinno robić? Skąd masz kod skoro niewiele wiesz?
    Próbowałeś/próbowałaś to skompilować? Uruchomić?
    Czego się spodziewasz? Że ktoś zrobi zadanie za Ciebie? Tak łatwo nie będzie. Jeśli nie spróbujesz tego ugryźć samodzielnie, to gwarantuję, że moderator wrzuci to do kosza, z powodu niezgodności z regulaminem forum. Jeśli Ci zależy, to próbuj samodzielnie a z konkretnymi kłopotami zwracaj się tutaj. Do kompilacji i testowania możesz nawet użyć czegoś online, np. http://cpp.sh/ albo https://www.onlinegdb.com/
    Pierwszy problem, który zauważyłem: deklaracja tablicy "tab[N]" nie może zawierać zmiennej "N" a tylko stałą. W dodatku zmienna ta jest niezainicjowana, więc o nieznanej wartości. Tablica powinna mieć ustaloną maksymalną wartość, jaką może przyjąć N, np. przyjmij 1000, albo nawet 100000 - dla testów nie będzie mieć większego znaczenia.
  • #3 18692423
    syssc
    Poziom 9  
    Posty: 5
    Ocena: 1
    Dostałem schemat blokowy do którego JA napisałem program, który jest podany. Kompilowałem go i w sumie myślę że źle mam napisany program.
  • #4 18692473
    chudybyk
    Poziom 32  
    Posty: 1537
    Pomógł: 196
    Ocena: 297
    syssc napisał:
    i w sumie myślę że źle mam napisany program

    Dlaczego sądzisz, że jest źle napisany? Co jest w nim nie tak? ;-)
  • REKLAMA
  • #5 18692511
    syssc
    Poziom 9  
    Posty: 5
    Ocena: 1
    Po analizie programu nie potrafie określić za bardzo co dokładnie ma ten program robić. Próbowałem zrobić ten schemat w magicznych bloczkach ale też mało mi to daje. Po skompilowaniu wychodzą dziwne liczby . Gdy daje liczbę większą niż 9 to program bierze pierwszą liczbę z tablicy i wypisuje ją jako m, a w tab[k] to wychodzi jakaś dziwna liczba.
  • #6 18692599
    chudybyk
    Poziom 32  
    Posty: 1537
    Pomógł: 196
    Ocena: 297
    Na razie zostawmy w spokoju program. Nie możesz go napisać nie wiedząc co ma dokładnie robić.
    Co realizuje schemat blokowy? Czy ten schemat jest prawidłowy? Po co Ci on w ogóle?
  • #7 18692620
    syssc
    Poziom 9  
    Posty: 5
    Ocena: 1
    Ten schemat jest od Mojego wykładowcy i on się pyta co on robi i napisać do niego program w C.
  • REKLAMA
  • #9 18694171
    chudybyk
    Poziom 32  
    Posty: 1537
    Pomógł: 196
    Ocena: 297
    syssc napisał:
    i on się pyta co on robi i napisać do niego program w C

    Zacznij więc od analizy schematu. Skąd będziesz wiedział, że program jest dobry, jeśli nie wiesz czego po nim oczekiwać? W programie widzę kilka problemów wynikających z przeoczeń i błędów. Znajdziesz je tylko przez debugowanie programu, ale debugując program musisz dokładnie wiedzieć co powinno być w zmiennych w każdym kroku programu.
    Spróbuj zacząć analizę od rozpisania na kartce kilku małych tablic, np. 3..5 -elementowych i prześledź co się powinno dziać w trakcie działania.

    Można spróbować zamiast kartki użyć od razu kompilatora C, ale nie pisz od razu całego programu, a zrób to "na raty". Na początek napisz sobie procedurkę wypisującą wszystkie elementy tablicy - przyda się do wypisania tablicy na końcu programu, ale w trakcie budowania algorytmu przyda się do wypisywania wszystkich elementów w każdym obiegu pętli - do sprawdzenia "co się dzieje". W algorytmie są dwie pętle - zewnętrzna i wewnętrzna. Na początek usuń wszystkie pętle - zostaw tylko początek - czyli pobieranie elementów tablicy i koniec, czyli wypisywanie elementów tablicy. Potem dodaj pętlę zewnętrzną - w każdym jej obiegu wypisz zawartość tablicy i zmienne sterujące pętli i sprawdź czy wypisało się tyle ile trzeba i to co trzeba. Na koniec dodaj pętlę wewnętrzną i znowu dodaj w jej obiegu wypisywanie całej tablicy. Spróbuj zanalizować, jak się zmieniają dane w całym programie. Kiedy dojdziesz do wniosku, że program działa jak powinien usuń wypisywanie zbędnych informacji w pętlach.
  • REKLAMA
  • #10 18726562
    Konto nie istnieje
    Poziom 1  
  • #11 18727212
    lanzul
    Poziom 30  
    Posty: 1023
    Pomógł: 199
    Ocena: 123
    syssc napisał:
    gdzie może być błąd
    syssc napisał:
    wychodzą dziwne liczby

    Z tego co tu można wyczytać ze schematu wynika, że ma zostać utworzona tablica dynamiczna o rozmiarze zgodnym z wprowadzaną liczbą.
    Następnie powinna ona zostać wypełniona odpowiednimi wartościami (liczbami).

    Nie znam się na C, ale wygląda jakby brakowało alokacji pamięci na tę tablicę i pętli wstępnej do wpisania wartości do niej.
    Krótka kwerenda w sieci podaje 'malloc' jako "narzędzie" do tego.
    Po przypisaniu do 'i' widać, że indeksy zaczynają się od 0, a więc górny indeks będzie 'N - 1', o czym należy pamiętać przy wypełnianiu tablicy.
  • Pomocny post
    #12 18731538
    chudybyk
    Poziom 32  
    Posty: 1537
    Pomógł: 196
    Ocena: 297
    lanzul napisał:
    Z tego co tu można wyczytać ze schematu wynika, że ma zostać utworzona tablica dynamiczna

    Otóż niekoniecznie. Równie dobrze można założyć jakiś maksymalny rozmiar tablicy, którą allokuje się statycznie, a w jakiejś zmiennej przechowuje się aktualną ilość danych.

    Problemem tego zadania jest przede wszystkim określenie algorytmu oraz spodziewanego rezultatu programu. Co z tego, że zrobimy program, który co do joty wykona to co w schemacie blokowym, jeśli wszystko nie będzie miało sensu. Ten schemat nawet nie zawiera wskazówki co jest rezultatem programu! Gdyby to była tablica, to należałoby ją wypisać prawda? Techniczna implementacja w języku C to kwestia drugorzędna.
    Mała podpowiedź: Wiele wskazuje, że to algorytm sortujący. Jaki konkretnie?

Podsumowanie tematu

✨ Użytkownik napotkał problemy z kodem sortowania w języku C, który napisał na podstawie schematu blokowego. Wskazano, że deklaracja tablicy z użyciem zmiennej N jest błędna, ponieważ N musi być stałą. Użytkownik nie był pewny, co program powinien robić, a po skompilowaniu otrzymywał nieoczekiwane wyniki. W dyskusji zasugerowano, aby najpierw zrozumieć schemat blokowy oraz określić, co program ma realizować. Podkreślono również potrzebę debugowania kodu oraz poprawności alokacji pamięci dla tablicy. Wskazano na możliwość użycia pętli do...while oraz na konieczność wprowadzenia wartości do tablicy przed sortowaniem. Ostatecznie zasugerowano, że program może być algorytmem sortującym, ale wymaga dalszej analizy.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA