Wpis z mikrobloga

I przyszła pora na wątek z natury programistycznej.
Przedstawiam przykładowe podejście do rozwiązania problemu obliczania wymiarów opon samochodowych, jak średnica felgi, wysokość profilu opony, całkowita średnica opony oraz jej obwód.
Na wstępie przedstawiłem zasady obliczania oraz interpretacji poszczególnych wartości, natomiast kolejno przedstawiłem i omówiłem źródło przygotowanego programu.
Pragnę również zaznaczyć w tym miejscu, że nie jestem ani zawodowym ani profesjonalnym programistą. Wykorzystuję programowanie do rozwiązywania swoich problemów natury inżynierskiej lub okołoinżynierskiej w pojawiających się schematach, zaś pokazywane przeze mnie rozwiązania mają jedynie służyć jako wskazanie przykładowej drogi do realizacji wybranego problemu dla osób, które nie są biegłe w programowaniu, stąd też proszę o wyrozumiałość osób zaawansowanych w programowaniu, a wszelkie ewentualne wskazówki dotyczące moich rozwiązań będę starał się omówić w kolejnych odcinkach.

Zapraszam: Jak obliczyć rozmiar opon? Program w języku C oraz omówienie biblioteki ctype.h

A już w kolejnym odcinku: przepis na uniwersalne koło jako koncepcyjne podejście do modelowania 3D.

#inzynierprogramista #jezykc #programista15k #programowanie #naukaprogramowania #motoryzacja
  • 14
@Zelber: W zasadzie kieruję się takim stwierdzeniem, że skoro ja - amator programowania, napiszę sobie coś w C i to działa i jeszcze staram się przez logikę wyjaśnić dlaczego użyłem takiego typu danych a nie innego, lub takiego sposobu a nie innego, tak też każdy inny, kto poznaje lub włada innym językiem programowania, bez problemu to wykorzysta dla siebie (jeśli się mu to oczywiście do czegoś przyda) i będzie mu to
@InzynierProgramista:

W zasadzie kieruję się takim stwierdzeniem, że skoro ja - amator programowania, napiszę sobie coś w C i to działa i jeszcze staram się przez logikę wyjaśnić dlaczego użyłem takiego typu danych a nie innego, lub takiego sposobu a nie innego, tak też każdy inny, kto poznaje lub włada innym językiem programowania, bez problemu to wykorzysta dla siebie (jeśli się mu to oczywiście do czegoś przyda) i będzie mu to
@Zelber:

W C tracisz czas na klepanie boilerplate kodu, pisanie funkcji do parsowania stringów, pisanie logiki wczytywania danych z konsoli.


Dla jednego strata czasu, dla innego cenna wiedza. Dużo więcej wyniesie z klepania w C niż gdyby wziął Pythona i napisał serwer w jednej linijce. Tym bardziej, że kolega chce się zająć mikrokontrolerami. Zresztą co za problem przesiąść się z C na coś wysokopoziomowego w zależności od potrzeb?
@zwei: co wyniesie? W C w takim zastosowaniu piszesz znacznie więcej dziwnego kodu i dbasz o rzeczy, które w "normalnych" językach się kompletnie nie przydają, a nie przybliżają Cię zupełnie do rozwiązania głównego problemu.

A i tak taki kod jest podatny na multum błędów, których autor może zupełnie nie być świadomy. W pełni zgadzam się z @Zelber - jak nie piszesz na mikro albo OSa, to C w takim zastosowaniu to
@zwei:
@Zelber:
Cieszę się, że dyskusja się rozwija, dziękuję za zrozumienie ze strony @zwei, i chciałbym, żeby kolega @Zelber jednak troszeczkę spojrzał na przedstawiony problem w inny sposób.
1) Standardowo zajmuję się pracą związaną z technologią oraz konstruowaniem, przeliczaniem itd. Niekiedy w zależności od złożoności elementu mechanicznego są to czynności żmudne i nie zawsze znajdzie się recepta na zrobienie tego w sposób automatyczny. Dlatego z mojego punktu widzenia, używanie
@InzynierProgramista:

1) Standardowo zajmuję się pracą związaną z technologią oraz konstruowaniem, przeliczaniem itd. Niekiedy w zależności od złożoności elementu mechanicznego są to czynności żmudne i nie zawsze znajdzie się recepta na zrobienie tego w sposób automatyczny. Dlatego z mojego punktu widzenia, używanie języka C w porównaniu do niektórych obliczeń i ich czasochłonności wcale nie jest jakimś bardzo żmudnym działaniem. Zrozum proszę, że czas stracony na napisanie własnych funkcji ułatwiających pracę, niekiedy
@Zelber:

W jakimś Pythonie, czy innym matlabie zajmie to 3-5x mniej czasu mniej niż w C. Warto do tego dodać, że do sporej części obliczeń inżynierskich te języki mają już gotowe rozwiązania/biblioteki.


Zgadzam się z tym, że zarówno w Pythonie, Matlabie, Javie itd... zostałoby to wykonane w pewnym krótszym odcinku czasu. Zgadza się, że istnieją biblioteki czy rozszerzenia wspomagające i przyspieszające dodatkowo prace.
Jednakże jest wg mnie trochę innej maści problem.
@InzynierProgramista: ten kod jest tak słabvej jakości, że ciężko się na to patrzy, fefdziesiąt linii kodu, który można zastąpić jednym wywołaniem sscanf, a no i ctype.h to plik nagłówkowy, a nie biblioteka
Panie @leoha, ale powoli...
Kod jest słabej jakości ponieważ postanowiłem poeksperymentować z funkcjami, strukturami, wskaźnikami i napisać własną interpretację ciągu wydarzeń w programie, czy kod jest słabej jakości ponieważ użyłem funkcji lub instrukcji, która źle działa i powinna wyglądać inaczej, czy kod jest słabej jakości tylko dlatego, że nie użyłem funkcji sscanf?
@InzynierProgramista:
- nie do końca chyba wiesz, że wskaźnikiem można operować jak tablicą i robisz jakieś dziwne operacje arytmetyczne np: *(oznaczenie + licznik) zamiast po prostu napisać oznaczenie[licznik], dużo czytelniejsze i od razu widać intencję
- formatowanie: aż się prosi, żeby wstawić gdzieniegdzie spację (np. po słowach kluczowych "if", przed nawiasami "{" jeśli są w linii z if'em albo while'em), warto też dla czytelności wstawić pustą linię np. między funkcjami itd..
@leoha: I teraz mi się podoba, ponieważ mogę zobaczyć konkretną opinię, miejsca problemów, merytorykę do której mogę się jakoś odnieść.
Zacznijmy zatem po kolei:

nie do końca chyba wiesz, że wskaźnikiem można operować jak tablicą i robisz jakieś dziwne operacje arytmetyczne np: *(oznaczenie + licznik) zamiast po prostu napisać oznaczenie[licznik], dużo czytelniejsze i od razu widać intencję


Owszem, wiem. Opowiadałem o tym np. w odcinku nr 15. I teraz jak można
@InzynierProgramista:

Skoro coś jest dopuszczalne to dlaczego z tego nie korzystać i nie używać?

kod się pisze dla ludzi, nie dla komputerów, więc powinieneś używać konstrukcji, która jest najprostsza do zrozumienia dla człowieka, a nie używać czegoś tylko dlatego, że jest. Arytmetyka pointerów zawsze będzie mniej czytelna niż indeksowanie tablicy

W zasadzie nie dociera to do mnie, że to jest mniej czytelne i bardziej komplikuje kod.

No to niech dotrze. Zarówno
@leoha: Dziękuję za podesłane przykłady. Postaram się z nimi zapoznać i wyciągnąć wnioski.
Mam nadzieję, że będzie udawało mi się w miarę możliwości poprawiać jakość prezentowanego kodu, jednakże chciałbym pozostawić sobie furtkę na dalsze eksperymenty w nawiązaniu do sposobu osiągnięcia celu, czyli tak jak to w tym przypadku było - własne funkcje zamiast jedna gotowa wbudowana.
Cieszę się, że udało się rozwinąć dyskusję, dzięki której mogę wynieść pomocne informacje, a nie