Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 16 lis 2024, o 02:48


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 22 sty 2021, o 17:26 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

Witam, chciałem prosić aby ktoś kto zna się trochę na języku C zweryfikował czy przedstawiona poniżej funkcja poprawnie liczy średnią wartość ADC. Dziękuję za pomoc.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sty 2021, o 19:44 
Offline
Użytkownik

Dołączył(a): 29 gru 2013
Posty: 82
Pomógł: 3

linia 18, czym jest adc_value? bo z tego co widzę przypisujesz temu wartość średnią, ale mniejsza.

Kod:
sr[idx]=measurement(PA5);


Na pewno nie chciałeś wypełnić całej tablicy tylko pierwszy jej element? :^)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 sty 2021, o 21:03 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

wonsz napisał(a):
linia 18, czym jest adc_value? bo z tego co widzę przypisujesz temu wartość średnią, ale mniejsza.

To zmienna globalna, której przypisuję wartość ADC, żeby móc używać jej potem w głównej pętli programu.

wonsz napisał(a):
Kod:
sr[idx]=measurement(PA5);


Na pewno nie chciałeś wypełnić całej tablicy tylko pierwszy jej element? :^)


Ale nie rozumiem, przecie wypełniam całą tablicę, bo zmienna "idx" jest inkrementowana z każdym wywołaniem funkcji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2021, o 19:12 
Offline
Użytkownik

Dołączył(a): 06 lut 2018
Posty: 58
Pomógł: 0

Moim zdaniem kod jest poprawny i zgodny z oczekiwaniami. Testowałeś?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2021, o 21:07 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

mtbchn napisał(a):
Testowałeś?


Tak, po testach okazuje się, że wszystko działa poprawnie. Pytałem tylko, w razie czego bo mogło się zdarzyć, że coś przegapiłem i coś może nie działać. Bardzo dziękuję za pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2021, o 23:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

Jedną rzecz proponowałbym Ci jeszcze uwzględnić, żeby otrzymać bardziej poprawny wynik. Aktualnie twoja funkcja troszkę zaniża średnią, konkretnie o wartość 0,5. Dla przykładu co oczekiwałbyś od twojej funkcji jeżeli miałaby obliczyć średnią z następujących 8 próbek: {1, 1, 1, 1, 1, 1, 1, 0}? Twoja funkcja da wynik 0. A według mnie wypadałoby żeby uśredniła to jako 1. Jeżeli tak ma być to ok, a jeżeli nie to czytaj dalej. ;)
Przy dzieleniu zmiennych całkowitych w języku C wynik zaokrąglany jest zawsze w dół, np. 7/8 otrzymasz w wyniku 0. Jak chcesz troszkę pogłówkować to zakończę już na tym moją podpowiedź. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2021, o 00:10 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

Witam, bardzo dziękuję za cenną uwagę wiedziałem, że mogę coś przegapić :P. A więc do mojej funkcji dodałem 2 linie kodu. Myślę, że mój zamysł na rozwiązanie tego problemu jest poprawny, ale nie mam pewności czy dobrze wykrywam jaka liczba występuje po przecinku. Czy reszta z dzielenia danej liczby jest tożsama z liczbą, którą dostaję po przecinku?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2021, o 09:16 
Offline
Użytkownik

Dołączył(a): 09 sty 2021
Posty: 66
Pomógł: 0

Tutaj dodaję kod, który jeszcze zmodyfikowałem czy on będzie poprawnie realizował swoje zadanie?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2021, o 19:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 wrz 2013
Posty: 74
Lokalizacja: Sierakowice/Gdańsk
Pomógł: 9

antosV10 napisał(a):
Czy reszta z dzielenia danej liczby jest tożsama z liczbą, którą dostaję po przecinku?
Nie. Reszta z dzielenia liczb całkowitych (% - operacja modulo) w twoim przypadku daje w wyniku wartość z zakresu od 0 do SR-1.

antosV10 napisał(a):
Tutaj dodaję kod, który jeszcze zmodyfikowałem czy on będzie poprawnie realizował swoje zadanie?
Zgubiłeś coś za ifem, jak już to zamiast "sr/SR+1;" powinno być "sr1 = sr1/SR+1;". Wydaje mi się że te obliczenia realizują zadanie. Ale można to zrobić o wiele prościej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Czyli do sumy 8 próbek dodajesz jeszcze połowę tego przez co będziesz dzielił. :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 9 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO