piątek, 22 października 2021

Próba pomocy z zadaniem z informatyki

 Zadanie z C++ zrobione w JS

3 zdjęcia od góry znak kwadrat szary z czerwonym napisem C++, poniżej duży żółty kwadrat z czarnym napisem JS, na samym dole przedstawienie osoby przed laptopem w tle natomiast kod CSS. Osoba ta ma symbolizować programistę.
Źródło własne C++ oraz JS wykonanie w pixlr


Informatyka dziś a wczoraj

Znajoma z czasów studiów poprosiła mnie o pomoc. Osobiście odczytałem tą próbę nie jako "pomóż napisać" a raczej "napisz" kod. Problem polegał na tym, że ja C++ nigdy się nie nauczyłem, a ostatnią styczność z nim miałem kilka ładnych lat temu. Przyznam się bez bicia, że nie pamiętam nawet składni tego języka tj. nie pamiętam jak deklarowało się zmienne choć... coś mi świta. W skrócie, dziś nie jestem w stanie napisać nawet hello world w C++. Ponieważ nie miałem z nim styczności od naprawdę długiego czasu. Powiedziałem jej szczerze, nie mogę pomóc w ten sposób, ale podeślij mi to co napisałaś, rzucę okiem, uruchomię i zobaczę co jest.... może coś przypomnę sobie czy zajrzę do Google. Jednak nie podesłała mi kodu...

O co chodziło z zadaniem.

Zadanie według mnie dosyć proste. 
Należy sformułować dwie funkcje, których parametrem będzie liczba "n" czyli naturalna a wynikiem suma dzielników tej liczby.

  • Pierwszy algorytm ma sprawdzać podzielność danej liczby przez kolejne dzielniki. Od najmniejszego do największego (czyli podanej liczby). Od 1 do "n"
  • Drugi algorytm ma robić praktycznie to samo lecz z kilkoma zmianami. Dzielnik początkowy to 2 a ostatni to pierwiastek liczby "n". Jeżeli znajdzie dzielnik to doda jego parę, 
Pierwsza funkcja ma zwrócić sumę dzielników np. dla liczby 7, dzielnikami są 1 oraz 7 czyli suma dzielników to 8.
W przypadku drugiej funkcji wynik dla liczby 7 wyjdzie również 8, tylko zostanie inaczej obliczony.

Ja zrobiłem to tylko, że w JavaScript.


Powyżej wykonanie tego zadania tylko w JavaScript. 
Tylko zamiast wypisywać wynik w konsoli, przenoszę go na ekran za pomocą "innerHTML".
Jako, że uczę się nadal JavaScript to uznałem takie zadanie, za całkiem fajną możliwość sprawdzenia czego się nauczyłem w praktyce. 

Skrócone omówienie kodu dla jednej funkcji

Zamiast podawać liczbę "n" w moim przypadku jest to zmienna "x" w kodzie, zastosowałem możliwość podania dowolnej liczby.
Prompt przyjmuje wartość w stringu więc tą wartość konwertujemy do number (liczby), w przeciwnym wypadku nie moglibyśmy na takiej wartości pracować.

Przed pętlą for podałem dwie zmienne suma oraz suma2 będą one potrzebne do wyniku końcowego. Jedna powie nam ile dana liczba "x" posiada dzielników, a druga je podsumuje. Wiadomo, że pętla musi się wykonać ileś razy, w tym wypadku wykona się tyle ile wynosi wartość "x" ponieważ maksymalnym dzielnikiem może być tylko i wyłącznie ona. np. dla 4 pętla wykona się 4 razy.

Później funkcja if. Ponieważ dzielnikiem jest każda liczba naturalna która nie zwróci nam reszty z dzielenia. Wtedy następuje wykorzystanie suma oraz suma2.
Jeżeli reszta z dzielenia wyniesie 0 wówczas suma zostaje zwiększona o wartość 1 czyli mamy 1 dzielnik a suma2 o wartość "i". Wartość przez którą dzielimy podaną liczbę "x". np. 4 / 1 = 4 czyli i = 1 lub 4/2 = 2 czyli i = 2 inaczej mówiąc reszta z dzielenia wynosi 0.

Później wracamy i wykonujemy pętlę tyle razy ile wynosi nasza liczba "x".

Na końcu zostaje nam zwrócony napis w HTML w którym widzimy liczbę podaną przez nas "x" ilość jej dzielników suma oraz podsumowaną wartość tych dzielników suma2 .

Alternatywnym rozwiązaniem jest zamiast zwrócić w HTML to wypisać wynik w konsoli. Ja z tego nie skorzystałem.

np. dla 4 mamy 3 [1,2 i 4] dzielniki i ich suma to  7.

W trakcie pisania kodu dodałem też od siebie takie elementy jak np. tablica z dzielnikami i ich podanie w wyniku końcowym. Jednak zrezygnowałem z faktu, że chciałem zostać wierny poleceniu dla konkretnego zadania. 

Czyje to zadanie ?

Kuzyn koleżanki na informatyce (przedmiot w szkole średniej) ma C++, za moich czasów szczytem w nie informatycznej klasie był HTML. Dziś widocznie się to mocno zmieniło, nie wiem czy na plus czy minus. Sam raczej nie przepadałem i nadal nie przepadam za reżymowym systemem oświaty i wydaje mi się, że takie podejście raczej zrazi uczniów. Osobiście widzę po sobie, że jak wracam czasem do rachunkowości to dziś wydaje mi się ona ciekawa a w szkole była znienawidzona. 
Tak samo (oby nie) będzie z uczniami, ci którzy będą wspominać C++ źle (przez szkołę) a przysiądą do niego później z inicjatywy prywatnej przekonają się, że programowanie realnie nie jest takie straszne jak to szkołą pokazuje. 

Zadanie trudne nie jest. Tylko należy znać podstawy C++, ja ich nie pamiętam i niestety dla koleżanki, nie chce mi się go uczyć nawet tych 50 minut poświęcić by przypomnieć sobie podstawy. Powiedziałem jej, że pomogę jak ONA napisze bądź jej kuzyn kod nawet jak będzie coś źle działo, to rzucę okiem i wtedy sięgnę po C++ by pomóc. Niema jednak mowy, że odświeżę sobie C++ by zrobić to zadanie za kogoś.  Wracając do początku, to nie podesłała mi kodu, tylko zdjęcie strony z poleceniem zadania. Ja jej odesłałem kod napisany w JS aby pokazać, mniej więcej o co chodzi z tym zadaniem. Temat nie jest jeszcze zamknięty, jak pokażę, że próbuje pomóc kuzynowi i coś pisze, to pomogę. Niestety jak efekt będzie taki, że nie próbuje to ja też nie będę próbować. 

P.S

Część kodu w tym zadaniu wykorzystałem z zrobionego dla siebie kalkulatora kilka dni wcześniej. Dlatego np. zamiast jakiegoś bardziej wyszukanego zdania, jest "podaj wartość x", bądź występuje w <p> id "wynik", to są pozostałości z przeniesionego kodu z tego kalkulatora. 
Chciałem tylko sprawdzić czy uda się zrobić to w innym języku. I tak, udało się.

Sam nadal się uczę JavaScript i mimo wszystko, takie mini zadanka są fajne, pozwalają sprawdzić w praktyce ile się już z tego JavaScript wie, bądź innego języka. A to tylko utrwala naszą wiedzę z tego co wiemy i pomaga nadal się rozwijać.