понедељак, 10. септембар 2018.

Na mlađima svet ostaje


Give me five! ("Baci kosku!")

ili(ti)

Od izora PET putića, vode na 5 strana


Možemo pričati kako je bilo u naše vreme, kako smo više čitali i više znali, to su radili ljudi od pamtiveka, pa nekako je uvek bilo (baš) obratno!
Vreme se menja i način razmišljanja se menja. Pročitano i zapamćeno je (konačno, "hvala bogu", i sl.) sve manje bitno.
Bitno je "ušemiti se", bitno je pratiti trendove, bitno je biti u kontaktu sa drugima, bitno je (znanje) deliti i razmenjivati, a od drugih upijati.

Ako je negde tako, onda je to u IT sferi, koja je uz uspone i padove, postala malo zrelija, ali još uvek mlada, gibka i slaba (slabo očvrsla, slabo standardizovana, slabo ukalupljena, slabo definisana kao (ipak) inženjerska disciplina).

Dakle u tom svetu, učiti od velikih Open Source zajednica, primiti na poklon milione linija koda, rešenja za ovo ili ono, ali pre svega uputstva za razmišljanje, i ostavština da se svet ne izmišlja uvek od početka.

"I najvažnije,
neka veruju u sebe…
…neka se osećaju
bespomoćno, kao deca, jer…
…slabost je velika stvar,
a snaga je ništa.
Kada se čovek rodi,
on je slab i gibak…
…a kad umire,
čvrst je i bezosećajan.
Kada drvo raste,
nežno je i savitljivo…
…ali kada je suvo
i tvrdo, umire.
Tvrdoća i snaga su
saputnici smrti.
Gipkost i slabost su
izraz svežine postojanja.
Jer, nešto što je očvrsnulo,
nikada neće pobediti."
Iz filma Andreja Tarkovskog - Stalker (1979)


Eto i ja pomalo očvrsla "stara kuka" da poklonim nešto mladim generacijama.
Onima koji će se otisnuti u IT vode, a još nisu (praktično) ni počeli.
Nije strašno, znači, osećati se bespomoćno i slabo, prvi korak je uvek najteži ali je i najduži put uvek počeo njime - prvim korakom.

Došavši u situaciju da pomognem detetu jednog prijatelja iz gimnazije u osnovama programiranja, pa još u C# (a gde me nađe, od toga sam 'leba jeo skoro tri godine, iako je bilo pre više od deceniju; btw. radio samo sa C# 1.0, još je bio "vruć", kao i furune).
Onda, sam preveo rešenje iz ovog programskog jezika u još 4, tako da postoji PET verzija programa koji radi isto. Slučajno je to bio "zadatak br. 5" sa liste zadataka za "domaći" (zapravo vežbu za završni ili pismeni zadatak, od koga je zavisila ocena). Tako da je "zadatak 5" na PET različitih programskih jezika.

PROGRAMI REŠAVAJU SLEDEĆI PROBLEM (ZADATAK BR. 5):
Na osnovu unešene 3 stranice trougla, odrediti da li to može (uopšte) biti trougao, i ako može izračunati površinu i obim.

Napomena:  rešenja za različitim programskim jezicima nisu bukvalni prevod prvog rešenja (u C#), donekle su to rešenja u VB.NET-u i C++, dok su Phyton i Javascript rešenja donekle drugačija (i kreativnija, naročito u smislu matematičkog dela, gde je definisano kako se problem rešava).
Phyton i JS kodovi koriste funkcije (što je malo napredniji način rešenja problema i u programskom (sofverskom) smislu). U nijedom od ovih programskih jezika (5 od 10 najpopularnijih, i najkorisnijih) nisam koristio mogućnosti objektnog programiranja, jer je problem trivijalan i namenjen apsolutim početnicima u programiranju: tipično gimnazijalcima, naročito jezičkog smera; ali i uopšte onima koji tek počinju da uče programiranje (jedan od ovih 5 jezika).

Dodatno, programi NE koriste vizuelne objekte (nego su čiste konzolne aplikacije). VB, C# i C++ su urađeni i isprobani u Visual Studio programu (verz. 2012, 2015 i 2017). Dakle, napravite nov projekat tipa "console application" i unesete kod u odgovarajući fajl za "glavni program" (npr. *.cpp kod C++).
Slično je i za JS gde otvorite "new Web Site" pa "prazan" (empty Web Site, u npr. C#, nema veze sve je to ASP.NET) pa ne morate otvarati js fajl (kao poseban) nego samo new -> html (htm dokument) ... u VS-u već imate sve napravljeno a sam kod ide unutar tag-ova body (otvaranje i zatvaranje) te ne zaboravite:

script language="javascript" type="text/javascript"

a posle da zatvorite script tag pre zatvaranja body-a.
(ostalo VS pravi sam). Ovako kako je može se uneti u tekst editor (notepad) i snimiti kao txt pa preimenovati u *.js te pokrenuti iz bilo kog browser-a.
Onda vam treba HTML shell, znači HTML pa Body tagovi te onda tag za javascript, što morate ručno uneti (u ovom slučaju).
Nisam mogao to da stavim jer Blogger radi na HTML-u.
Python nisam probao u VS, već Python 2.7 IDLE-u, koga je lako skinuti i instalirati.
Dakle, svi programi - RADE (za razliku od rešenja na net-u koja su ponekad isuviše generička i treba ih doterati).

I naravno, programi su školski (za učenje, najosnovnijeg programiranja), te nemaju error handler-e (od vrste unosa pa na dalje), niti su tome namenjeni.

Možda za koji dan (nedelju) otvorim jednu anketu (možda i na motornaulja.blogspot.com) gde bi me zanimali utisci totalnih laika za programiranje u smislu koji vam se programski jezik (makar u osnovnoj formi) najviše sviđa uopšte, i nevezano za to koji bi učili, te (možda) i oceniti svaki od njih (možda i po kriterijumima). Najverovatnije samo dva ali možda i 5-6 pitanjca. No, otom-potom.

Mlađe generacije, i starije koji su ljubitelji ali nikad nisu učili programiranje:
UŽIVAJTE!

ZADATAK 5 u C#-u

static void Main(string[] args)
        {
            Console.Write("Unesite stranicu a: ");
            double a = Convert.ToDouble(Console.ReadLine());
            Console.Write("Unesite stranicu b: ");
            double b = Convert.ToDouble(Console.ReadLine());
            Console.Write("Unesite stranicu c: ");
            double c = Convert.ToDouble(Console.ReadLine());
            double s = (a + b + c) / 2;
            //Površina se računa po Heronovoj formuli
            double P = Math.Sqrt(s*(s-a)*(s-b)*(s-c));
            //Ako je površina nula, stranice ne odgovaraju trouglu
            if ((P == 0) || ((a + b) < c) || ((a + c) < b) || ((b + c) < a))
        // dva puta jednako je samo jednako (logičko jednako), isto i za "ili" (||) - Logical OR
        // u principu prvi uslov nije neophodan i može se izostaviti; savršeno radi i bez.
        // P==0 je uzeto samo zato što je P već izračunato (u prethodnom koraku)
        // kod logičkog operatora || čim je jedan uslov ispunjen, drugi se ne proveravaju
            {
                Console.WriteLine("stranice ne pripadaju trouglu!");
            }
            else
            {
                double Obim = 2 * s;
                Console.WriteLine("Obim trougla je: " + Obim);
                Console.WriteLine("Površina trougla je : " + P);
            }
        }


ZADATAK 5 u C++-u

// Zadatak 5.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include
#include


int _tmain(int argc, _TCHAR* argv[])
{
            double a, b, c;
            std::cout << "Unesite stranicu a: ";
            std::cin >> a;       
            std::cout << "Unesite stranicu b: ";      
std::cin >> b;
            std::cout << "Unesite stranicu c: ";      
            std::cin >> c;
             double s = (a + b + c) / 2;
                        //Povrsina se racuna po Heronovoj formuli
             double P = sqrt (s*(s-a)*(s-b)*(s-c));
             //Ako je povrsina nula, stranice ne odgovaraju trouglu
             if ((P == 0) || ((a + b) < c) || ((a + c) < b) || ((b + c) < a))
            {
                std::cout << "stranice ne pripadaju trouglu!";
            }
            else
            {
                double Obim = 2 * s;
                std::cout << "Obim trougla je: ";
                                       std::cout << Obim;
                                       std::cout << "\n";
                std::cout << "Povrsina trougla je: ";
                                       std::cout << P;
                                       std::cout << "\n";
            }
            return 0;
}


ZADATAK 5 u VB.NET-u

    Sub Main()

        Console.Write("Unesite stranicu a: ")
        Dim a As Double = Convert.ToDouble(Console.ReadLine())
        Console.Write("Unesite stranicu b: ")
        Dim b As Double = Convert.ToDouble(Console.ReadLine())
        Console.Write("Unesite stranicu c: ")
        Dim c As Double = Convert.ToDouble(Console.ReadLine())
        Dim s As Double = (a + b + c) / 2
        Dim P As Double = Math.Sqrt(s * (s - a) * (s - b) * (s - c))

        If (P = 0) OrElse ((a + b) < c) OrElse ((a + c) < b) OrElse ((b + c) < a) Then
            Console.WriteLine("stranice ne pripadaju trouglu!")
        Else
            Dim Obim As Double = 2 * s
            Console.WriteLine("Obim trougla je: " & Obim)
            Console.WriteLine("Površina trougla je: " & P)
        End If

    End Sub


ZADATAK 5 u Python-u

def area(a, b, c):
    # racunanje poluobima koji se koristi za povrsinu
    s = (a + b + c) / 2
    # racunanje povrsine
    area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
    return area

def perimeter(a, b, c):
    # Racuna obim
    perim = a + b + c
    return perim

def main():  
    a = int(input('Unesite stranicu a: '))
    b = int(input('Unesite stranicu b: '))
    c = int(input('Unesite stranicu c: '))
    if ((a + b) < c) or ((a + c) < b) or ((b + c) < a):
        print "Stranice ne pripadaju trouglu!"
    else:
        print "Povrsina trougla je:", area(a, b, c)
        print "Obim trougla je:", perimeter(a, b, c)
main()




zadatak u javascipt-u:

var a = + prompt (" Unesite stranicu trougla a: ");
var b = + prompt (" Unesite stranicu trougla b: ");
var c = + prompt (" Unesite stranicu trougla c: ");
var H = Math.max(a, b, c);
var S = 0.5 * ( a + b + c);
var Obim = 2 * S;
if (( a + b + c - H) > H )
{
function CalculatePov (a, b, c, S)
{ var Povrsina =
Math.pow ( S * (S - a) * (S - b)*(S - c) , 0.5) ; return Povrsina; }
document.write (" Povrsina trougla je: " + (CalculatePov (a, b, c, S).toFixed(2)) + " Obim trougla je: " + Obim);
}
else alert (" Date stranice ne pripadaju trouglu! ")


Нема коментара:

Постави коментар