Forum www.nestor-electronic.pl Strona Główna www.nestor-electronic.pl
Forum sterowników procesorowych- programy BASCOM
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

prosba o sprawdzenie.

 
Napisz nowy temat   Odpowiedz do tematu    Forum www.nestor-electronic.pl Strona Główna -> Pomoc w programowaniu BASCOM
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
paweld
Nowy


Dołączył: 03 Mar 2013
Posty: 2

PostWysłany: Nie Mar 03, 2013 10:16 pm    Temat postu: prosba o sprawdzenie. Odpowiedz z cytatem

Witam,
mam taką gorącą prośbę o sprawdzenie tych kodów. Czy dobrze to rozumiem. Nie ma na czym teraz testować...

1. Napisz deklaracje zmiennych
A, przechowujacej liczby całkowite od 0 do 255
B, przechowujacej liczby wymierne (niecałkowite)

Dim A As Byte


Dim B As Single



2. Napisz kod zwiekszajacy wartosc zmiennej A o 1

Dim A As Byte
A=A+1

3. Napisz kod, który przypisze do zmiennej A
1) wartosc zmiennej B, jeżeli B jest wieksze od 0
2) wartosc zmiennej B pomnożona przez -1, je+eli B nie jest wieksze od 0

Dim A As Byte
Dima B As Byte

If B>0 Then A=B
End if
If B<O Then A=-1*B
End if


4. Napisz kod, który ustawi 6 pin portu B na 1, a wszystkie pozostałe piny na 0.
Config Partb=Output
Portb = &B00100000

----

?
Dziękuje za pomoc!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
fourup
Lekko zaangażowany


Dołączył: 06 Maj 2012
Posty: 42
Skąd: KRK

PostWysłany: Pon Mar 04, 2013 10:22 pm    Temat postu: Re: prosba o sprawdzenie. Odpowiedz z cytatem

paweld napisał:
Witam,
mam taką gorącą prośbę o sprawdzenie tych kodów...


Sprawdziłem.
1. a - ok
1. b - prawie dobrze, ale źle

2. poprawnie, chociaż niewłaściwie

3. źle

4. źle, chociaż blisko

Tyle mogę powiedzieć, ale zadania z gimnazjum za Ciebie nie rozwiążę.

Mogę Ci za to podać ciekawy adres: http://www.pe.ifd.uni.wroc.pl/BascomBasicAVR3.pdf
_________________
Pozdrawiam
~fourup
____________________
Od Nestora mam:
AT8 v.1.0 - zarządza ciepełkiem w domciu
AT32SD +DHT11 +GM-210 (GPS) +inne gadżety... - bawię się Mr. Green
AT32TCPIP v2 + ExtPK - zajefajny sprzęt!
AT32U4 - koniec z programatorami!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
paweld
Nowy


Dołączył: 03 Mar 2013
Posty: 2

PostWysłany: Czw Mar 07, 2013 11:17 pm    Temat postu: Odpowiedz z cytatem

ok wyluczając literówki co jest źle w 3?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
fourup
Lekko zaangażowany


Dołączył: 06 Maj 2012
Posty: 42
Skąd: KRK

PostWysłany: Sob Mar 09, 2013 9:57 pm    Temat postu: Odpowiedz z cytatem

A więc w zadaniu nr 3:

Po 1. Już w samym zadaniu masz napisane (no, wiem: nie-wprost i trzeba się domyślać), że zmienna b może być liczba ujemną, więc zadeklarowanie jej jako Byte jest niewystarczające; musisz ją ustanowić jako Integer lub nawet Long.
Jeśli nie znamy (a nie znamy) zakresu wartości, jakie może przyjmować zmienna B, musimy założyć, że może przyjmować wartości z całego zakresu wartości dla swojego typu zmiennej, więc naturalną koleją rzeczy jest nadanie takiego samego zakresu dla zmiennej A poprzez odpowiednią deklarację. Może to być ten sam typ zmiennej (w przykładzie poniżej - Integer), lub też inny tym (ale "kompatybilny" z typem zmiennej B), którego zakres wartości będzie nie mniejszy od spodziewanych wyników.

Po 2. Kolejny błąd (wynikający z pośpiechu/niezrozumienia zadania/nieprzemyślenia treści?) - w Swoim przykładzie niesłusznie założyłeś, że "...jeżeli B nie jest większe od 0..." oznacza, że nie może wynosić 0 i ustawiłeś dwa (osobne) warunki: dla B>0 i B<0. Gdzie zatem zostanie rozpatrzona sytuacja, kiedy B=0 (a więc - zgodnie z treścią zadania - jeśli jest równe, to na pewno nie jest większe od 0)? Wiem, wtedy wynik będzie taki sam, jednak gdyby działanie było inne, niż iloczy, to już miałoby to znaczenie.
Owszem - zastosowanie dwu odrębnych instrukcji warunkowych nie jest błędem formalnym, jednak w drugim warunku musiałbyś sprawdzać B<=0, zamiast B<0. No i nie byłoby to "ładne", ani optymalne (a przy tworzeniu bardziej rozbudowanych programów, nauczysz się co znaczy optymalizacja ... kiedy będzie Ci brakować 4-ech bajtów, żeby zmieścić program w uC Wink ).
Warunek ten należałoby zatem zbudować na instrukcji If, ale w składni rozszerzonej (If...Then ... Else ... End If). Można też użyć w tym celu instrukcji Select Case, ale nie wymagałbym tego od początkującego Wink

Poniżej masz kod przemyślany i poprawny, według mnie (praktykującego od zaledwie 10 miesięcy) bascomowca...
Kod:

Dim A As Word , B As Integer

If B > 0 Then
    A = B
  Else
    A = -1 * B
End If


Za to od "kombinatora" (w pozytywnym znaczeniu tego słowa) zażyczyłbym sobie wersji super-optymalnej - jedno-liniowej i jedno-instrukcyjnej...
Myśleć!
Myśleć!
Nieszablonowo!
Myśleć!
Uciekać poza utarte schematy!
Myśleć!
Kombinować!
Myśleć!
Otóż, mnożenie przez -1 liczby nie-większej od 0 daje nam "wartość bezwzględną" (inaczej "wartość absolutną") tej liczby. Za moich czasów, w klasie 4 podstawówki (a było to jakieś 30 lat temu!), zapisywało się to tak:
|-2| = 2
I jest taka funkcja w Bascomie. I kod z jej wykorzystaniem wyglądałby tak:
Kod:

Dim A As Word , B As Integer

A = Abs(b)


I to tyle wykładów na dzisiaj, bo mi się palić już chce... I obiecany w innym wątku schemat, sam się też nie chce narysować... Cool
I następnym razem bez piwa nie zaczynaj... Mr. Green
_________________
Pozdrawiam
~fourup
____________________
Od Nestora mam:
AT8 v.1.0 - zarządza ciepełkiem w domciu
AT32SD +DHT11 +GM-210 (GPS) +inne gadżety... - bawię się Mr. Green
AT32TCPIP v2 + ExtPK - zajefajny sprzęt!
AT32U4 - koniec z programatorami!
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum www.nestor-electronic.pl Strona Główna -> Pomoc w programowaniu BASCOM Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


Powered by phpBB © 2001, 2005 phpBB Group