Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Napisać program z schematu blokowego w języku C

syssc 14 May 2020 01:07 987 11
IGE-XAO
  • #1
    syssc
    Level 2  
    Napisać program z schematu blokowego w języku C

    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ć:
    Code: c
    Log in, to see the code

    i w sumie nie wiem czy to jest dobrze i co dokładnie robi.
  • IGE-XAO
  • #2
    chudybyk
    Level 31  
    syssc wrote:
    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
    syssc
    Level 2  
    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
    chudybyk
    Level 31  
    syssc wrote:
    i w sumie myślę że źle mam napisany program

    Dlaczego sądzisz, że jest źle napisany? Co jest w nim nie tak? ;-)
  • IGE-XAO
  • #5
    syssc
    Level 2  
    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
    chudybyk
    Level 31  
    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
    syssc
    Level 2  
    Ten schemat jest od Mojego wykładowcy i on się pyta co on robi i napisać do niego program w C.
  • #9
    chudybyk
    Level 31  
    syssc wrote:
    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.
  • #10
    User removed account
    Level 1  
  • #11
    lanzul
    Level 30  
    syssc wrote:
    gdzie może być błąd
    syssc wrote:
    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.
  • Helpful post
    #12
    chudybyk
    Level 31  
    lanzul wrote:
    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?