Jump to content

Rekursīvs rindas summas aprēķins


GUNIS95
 Share

Recommended Posts

Kas tad tur nav saprotams?
Njem x veertiibas no -pi/2 liidz pi/2 ar soli pi/30
un reekjina y veertiibas peec dotaas formulas.

Un rekursija izmantojama tikai faktoriaala apreekjinaa. Citur nekur neredzu, ka rekursiju vareetu iedabuut.

  • Patīk 1
Link to comment
Share on other sites

Esmu tik tālu ticis, bet vērtības nesakrīt. Kas nav pareizi?

Program  uzd;
var X,A,S,Y: real;
    k:integer;
begin
  x:= -pi/2;
   while x< pi/2 do
   begin
      S:=0.5-1*(x-(pi/4));
      A:=-1*(x-(pi/4));
      k:=2;
      while ABS(A)> 0.00001 do
      begin
         A:= -A*4*sqr(x-(pi/4))/((2*k-1)*(2*k-2));//Šeit tiek aprēķināts nākamais loceklis no iepriekšējā
         S:=S+A;
         k:=k+1
      End;
      y:=cos(x);
      writeln(x:6:2,S:12,Y:12,k:6);//kāpēc izvadot uz ekrāna y nesakrīt ar S?
      x:=x+pi/30;
    end;
end.

Link to comment
Share on other sites

Redz... varēji jau sākt ar to, kādā priekšmetā tas ir, iekš kā jākodē...

Esi dzirdējis par funkciju izvirzīšanu rindā? Zini kā kalkulatorā rēķina kosinusa vērtību? No mat analīzes kosinusu var izvirzīt skaitļu rindā - bezgalīgā skaitļu rindā. Ja gribi izrēķināt kosinusa vērtību, tad tev jāizvēlas precizitāte, līdz kurai tu gribi rēķināt...respektīvi cik pirmos rindas locekļus paņemt. Saproti taču, ka tu nevarēsi bezgalīgu summu ar skaitliskām metodēm izrēķināt. Šeit tev ir jānofiksē n - teiksim tu paņemsi pirmos 10 rindas locekļus. Tas būs tavs tuvinājums-piedevām gana precīzs.

 

Un tad respektīvi tev jāizprintē vienkārši 30 skaitļi uzdotajās robežās.

Kur parādās rekursija? Nu vispār man nāk prātā LU BULS ar savām rekursīvajām funkcijām, bet laikam jau īsti nav. Ja nezini, tad tev jāizpīpē, kas ir rekursija. Ja ierakstīsi googlē "factorial using recurssion", tad arī sapratīsi kā to izdarīt, ja pašam nav izaicinājuma padomāt risinājumu, kurš ir triviāls.

 

Karoč nomierinies - saliec visu pa plauktiņiem un būs ok.

Labots - MaurI
Link to comment
Share on other sites

Zinu kā uzrakstīt faktoriāla funkciju.

function faktorials(n:integer):longint;
begin
if n=1 then faktorials:=1 else faktorials:= n* faktorials(n-1);
end;
Link to comment
Share on other sites

Леший
while x< pi/2 do

while x<= pi/2 do

 

 

Un lūdzu uzraksti, kas tā par izglītības iestādi un kurš pasniedzējs. Iestādi vajag sadedzināt un pelnus izbert Baltijas jūrā, pirms tam vajag pārliecināties, ka pasniedzējs ir iestādes telpās. Jo vienkārši nedrikst mūsu laikos mācīt pascal, tas izkropļo jauniešu smadzenes.

Labots - Леший
Link to comment
Share on other sites

Nu tagad esmu uztaisījis šādi, bet atkal ir problēma. kad palaižu programmu parādās exit code 207: invalid floating point operation.

Program  aaa;
uses crt;
var X,A,S,Y: real;
    n:integer;

function faktorials(k:integer):longint;
begin
if (k=1) or (k=0) then faktorials:=1 else faktorials:= k* faktorials(k-1);
end;

function Power(skaitlis:real; pakape:integer):real;
begin
Power:= Exp(pakape*Ln(skaitlis));
end;


begin
 Clrscr;
  x:= -pi/2;
   while x<=pi/2 do
   begin
      A:=-1*(x-(pi/4));
      S:=0.5+A;
      n:=1;
      y:=cos(x);
      S:=0.5;
      while Abs(A)>0.00001 do
      begin
         A:=power(-1,n)*power(4,n-1)*power(x-pi/4,2*n-1)/faktorials(2*n-1);
         S:=S+A;
         n:=n+1;
      End;
      writeln(x:6:2,S:24:6,Y:24:6,n:6);
      x:=x+pi/30;
    end;
end.
Link to comment
Share on other sites

Inspektors Caps
Un rekursija izmantojama tikai faktoriaala apreekjinaa. Citur nekur neredzu, ka rekursiju vareetu iedabuut.

Jā, jā, un to, kas prasīts tēmas virsrakstā (un laikam uzdevumā) - rindas summu - jau nu nemaz "nevar" izvirzīt rekursīvi...

 

Jo vienkārši nedrikst mūsu laikos mācīt pascal, tas izkropļo jauniešu smadzenes.

Pascal nav ideāls, bet smadzenes pat tieši nostāda vietā, jo iemāca disciplīnu ar mainīgo definēšanu u.c. Smadzenes izkropļo visādi klojurēti pērļu javismi un citi murgi, arī C++, ja to pārāk frankenšteinizē.

Labots - Inspektors Caps
  • Patīk 2
Link to comment
Share on other sites

kāda problēma to uzrakstīt rekursīvi ?

(defn cos-seq
  ([x]
     (cos-seq x 1 0))
  ([x n prev]
     (let [sub (- x (/ Math/PI 4))
           sign (if (even? n) 1 -1)
           t (if (< 1 n)
               (/ (* 4 prev sub sub) (* (+ n n -1) (+ n n -2)))
               sub)]
       (cons (* sign t) (lazy-seq (cos-seq x (inc n) t))))))

(defn cos [x] (reduce + (cons 0.5 (take 100 (cos-seq x)))))
sandbox.cos> (cos (/ Math/PI -2))
-9.635267397164717E-16
sandbox.cos> (cos (/ Math/PI 2))
-5.3289895616575175E-18
sandbox.cos> (cos 0)
1.0000000000000002
Link to comment
Share on other sites

Kāda disciplīna atšķiras no mainīgo definēšanas sākumā?

Atšķirība ka DD sludinājumos Pascal nefigurē. C++ un Java figurē.

Link to comment
Share on other sites

Леший

 

 

smadzenes pat tieši nostāda vietā

Nē un nē. Pascal ir valoda, kas risinā problēmas absolūti nedabiskā veidā un box'o cilvēka domāšanu.

Link to comment
Share on other sites

Pascal ir ļoti primitīva valoda, kurā nav ļoti daudz konceptu un iespēju, kuras ir citur.  To izmantot skolā ir pamatīga garīga atpalicība.

Link to comment
Share on other sites

Леший

/offtop/

 

Eksperimenta pēc, varētu apmācīt kādu skolēnu/studentu grupu erlang, haskell vai lisp, nemācot paskalu/javu/c++. Diez, cik no viņiem iepatiktos programmēšana, cik labi tie tajā iebrauktu utt.

  • Patīk 1
Link to comment
Share on other sites

iekš  Imperial College visi studenti sāk ar haskell.  


 

 

darba uzdevumā prasīts rēķināt cos()

 

 

vai tā tiešām ir pareiza formula ?   man  cos sanāk  tikai šādi

(defn cos1 [x] (* 2 (reduce + (take 100 (cos-seq (/ x 2)))))) 

post-1765-0-55999200-1415479137_thumb.png

Labots - MarisO
Link to comment
Share on other sites

Ļoti atvainojos, pats esmu vainīgs. Mana funkcija ko jārēķina ir cos(x) kvadrātā nevis pirmajā pakāpē. Nepareizi norakstīju uzdevumu. Tagad mana programma iet. Un starp citu neesmu nesekmīgs programmēšanā un Pascal ir labs tieši priekš saprašanas. Citiem ir grūti iebraukt pat Pascalā, kur nu vēl jūsu minētājās programmēšanas valodās.

Link to comment
Share on other sites

Normālās darba intervijās prasa rakstīt uzdevumus paša izvēlētā valodā, kaut vai pseidokodā.

Valodas "x" nīdēji bez objektīviem argumentiem var iet atpūsties un cerēt mani nesatikt kā intervētāju.

Link to comment
Share on other sites

Pilnīgi piekrītu japet, galvenais ir izpildīt uzdevumu. Kā? Tas ir katra paša ziņā.

Link to comment
Share on other sites

Леший
Normālās darba intervijās

Izskaidro man sakaru valodas izvēlei darba intervijās ar to, ka LV pasniedzēji dēļ kaut kādām tradicijām izmanto vienu no sliktākām valodām pasaules vēsturē.

Kaut pitons, JS vai pat Java būtu labākas alternatīvas beginners valodai.

Labots - Леший
Link to comment
Share on other sites

Ko nozīmē "sliktākā"? Kas tur ir slikts? Pitons, JS ar leaky abstraction ir nederīgas priekš iesācējiem.

Pascal ir gana laba, lai *mācītos* algoritmus un programmēšanas pamatus

Link to comment
Share on other sites

> Kaut pitons, JS vai pat Java būtu labākas alternatīvas beginners valodai.

 

Tās būtu labākas tikai tāpēc, ka tās joprojām izmanto reālajā darbatirgū un, vienkārši, būtu noderīgākas. Un tikai tāpēc, jo savādāk šīs valodas tāpat ir no vienas grupas — imperatīvā programmēšana. No otras puses, Java sabojātu domāšanu daudz spēcīgāk nekā JavaScript, Python un Pascal kopā, cilvēks spētu par problēmu domāt tikai izmantojot OOP konceptus. Tāpēc Javai nevajadzētu būt kā pirmajai valodai ar kuru cilvēku iepazīstina ar programmēšanu.

 

Būtu interesanti ja skolās, paralēli Pascal, tad C++ un Java, mācītu Scheme (Lisp) vai Haskell, tobiš, dekleratīvo programmēšanu.

Link to comment
Share on other sites

Inspektors Caps
Kāda disciplīna atšķiras no mainīgo definēšanas sākumā?

Tā mainīgo definēšana sākumā, pie tam atsevišķā speciālā vietā nav stulba mazsvarīga dīvainība, bet pareiza skaidra sakārtotība, īpaši mācību valodai. No tā cilvēks uzreiz dabū izprast kā darbojas programma/funkcija. To, ka vispirms tiek rezervēta vieta stekā un tad nāk pavisam cita daļa - izpildāmais kods. Tas uzreiz velk līdzi to, ka tiek izprasta steka būtība, pat, ja apmācāmais pats to vēl nenojauš un nezin kā to sauc. Tālāk pēc tam cilvēks apgūst dinamiskās atmiņas izmantošanu un tur Pascal labums ir tas, ka tā vispār nepinas kopā ar steka mainīgo definīcijām. Pilnīgais nodalījums veicina to, ka tiek izprasts, kas ir stack un kas heap atmiņa - kādas ir to atšķirības un pielietojumi. Savukārt, kad Pascal ir pietiekoši izprasts, tad pārslēgties uz C ir viens spļāviens, jo tās ir funkcionāli vienādas valodas. Un ar C jau var visu, kā arī ar to ir radītas lielākā daļa būtisko sistēmu. Kad ir izprasti pamati, tad tālāk problēmas nesagādā neviena valoda. Svarīgākais ir iemācīties programmēt ar izpratni, nevis apgūt līdz pēdējam smalkumam tieši Pascal sintaksi.

 

Nē un nē. Pascal ir valoda, kas risinā problēmas absolūti nedabiskā veidā un box'o cilvēka domāšanu.

Tieši Tavam teiktajam nē un nē. Kā augstāk aprakstīju, Pascal tieši lietas parāda tādas, kādas tās ir realitātē. Un Pascal neko nebox'o - to dara izglītības sistēma un cilvēki paši, apstājoties savā attīstībā.

 

Pēc stack un heap izmantošanas apguves būtu jāiemācās programmēt objektorientēti un strukturēt kodu. Programmēt objektorientēti nenozīmē truli zināt C++, C# vai Java OOP konstrukcijas, bet gan mācēt programmēt objektorientēti jebkur un ar jebko, to skaitā Pascal, C un jebkurā asamblerī. Mācību iestādes veic tikai pirmo - parāda kā pamuļļāt kaut ko valodās, kurās ir specifiskas OOP konstrukcijas. Pilnībā OOP principus nevienam tur nemāca, un labu koda strukturēšanu vispār neviens pat nepiemin. Līdz ar ko parasti visi, kuri baigi plātās ar to, ka māk OOP, patiesībā ir puskoka lēcēji, kuri ir pilnībā box'oti "viss tikai objektos" domāšanā, un neko vairāk nespēj. Kā jau te minēja, piemēram Java ved tikai tajā virzienā. Tā nav attīstība, bet drausmīgi ierobežota kaste, no kuras pēc tam ir ĻOTI grūti izvilkt ārā!

 

Python liels pluss ir formatējuma sasaiste ar funkcionalitāti. Formatējums kļūst obligāts, kas uzreiz iemāca disciplīnu, un reizē funkcionalitāte vienmēr ir korekti vizualizēta, kas palīdz precīzi izprast ko tieši tas kods vispār dara.

 

JavaScript is classified as a prototype-based scripting language with dynamic typing and first-class functions. This mix of features makes it a multi-paradigm language, supporting object-oriented,[6] imperative, and functional[1][7] programming styles.

Šis vispār ir tipiskā modernā murga piemērs. Labi, ka vēl ēst negatavo un māju netīra. Reāli neiemāca pilnīgi neko, kā vien haosu galvā. Nerunājot pat par to, ka tā praktiskais pielietojums ir tikai ļoti šaurā nišā - web pārlūkā, kur nav pieejamas lielākā daļa platformas iespēju un viss notiek vismaz desmitkārtīgi overbloated bremzētā (CPU) un uzpūstā (RAM) limitētā vidē. Tā ir vēl šaurāka domāšanas kaste par javizēto "speciālistu" kasti "viss tikai objektos".

 

Un tad ir viena gandrīz visiem absolūti nepieciešama lieta, ko diemžēl nemāca vispār - multithreading. Ja programmētājs nevar nakts vidū paskaidrot kas ir thread, wait function, event, semaphore, mutex, critical section, volatile variable, atomic operation un deadlock, tad no labas un efektīvas programmēšanas viņš nesajēdz pilnīgi neko. Visi tie, kurus šeit daudzi laikam uzskata par "ar nebloķētu domāšanu", reāli ir vieni vienīgi truli "ciklā poll'otāji", kas ir bērnudārza līmenis. To pilnībā pierāda Arduino IDE popularitāte ar šo:

    setup(): a function run once at the start of a program that can initialize settings

    loop(): a function called repeatedly until the board powers off

Internetā var redzēt kā visi "nebloķētās domāšanas speciālisti" raksta savas programmas ar šo pašos pamatos līko principu, jo patiesībā ir ļoti ierobežoti savā šaurajā domāšanas kastē. Un tieši tādēļ neviens no viņiem nejēdz radīt reālu production līmeņa programmatūru, kur būtu vairāk par dažām triviālām funkcijām, ko vienkārši truli ciklē uz riņķi.

Labots - Inspektors Caps
Link to comment
Share on other sites

Леший

 

 

Pascal tieši lietas parāda tādas, kādas tās ir realitātē.

Ok, prastākais jautājums: kā reālajā pasaulē izpaužās koncepts x := x + 1 ?

Link to comment
Share on other sites

 

 

Ok, prastākais jautājums: kā reālajā pasaulē izpaužās koncepts x := x + 1 ?

tieši tāpat kā: number += 1

Link to comment
Share on other sites

Inspektors Caps

@@Леший, ja uztraucies par ++ un -- operatoru neesamību, tad Pascal ir iebūvētas funkcijas Inc() un Dec(). Bet...

  • Pēc skolas matemātikas izprast x=x+1 ir pat vieglāk par ++.
  • Pārmācīties no viena uz otru, kad jau māki programmēt, ir pat mazāk par vienu spļāvienu.
  • Mūsdienās kompilatori savu darbu dara tik labi, ka vari kaut visu mūžu rakstīt to saskaitīšanu un kompilators tāpat ieliks optimālāko CPU instrukciju, kas parasti būs palielināšana.
  • Pat, ja izslēgsi optimizāciju vai ierakstīsi manuāli asamblerā un piespiedīsi kompilatoru likt saskaitīšanu, tad 99,9% programmatūras gadījumā tas nemainīs faktiski neko, jo performances atšķirība būs 0,0... %.

Vai Tev tiešām liekas, ka viena skaitļu palielināšanas operatora nozīme ir vispār salīdzināma ar vispārējo programmas, funkciju un atmiņas pārvaldības darbības izpratnes nozīmi? Tad jau varēji piesieties vēl pie tā kā reālajā dzīvē izpaužas cikli - ar goto jeb procesora instrukcijās ar jump.

Labots - Inspektors Caps
Link to comment
Share on other sites

ja uztraucies par ++ un -- operatoru neesamību

 

 

šeit laikam runa iet par to, ka matemātiski  x  nevar būt  x+1.    FP  valodās  (haskell,  erlang un arī clojure) tas arī nav iespējams - mainīgajam nevar piešķirt citu vērtību.  Manuprāt,  tas  ir labi un pareizi.      No šāda viedokļa visas imperatīvās programmēšanas valodas ir draņķīgas un  "kropļo domāšanu".

 

programmēt objektorientēti jebkur un ar jebko, to skaitā Pascal, C un jebkurā asamblerī.

 

Pascal taču neatbalsta OOP.   Nav tur nekādas klases un objekti  un  polimorfisms un inheritance  iespējams.  

 

 

Pascal tieši lietas parāda tādas, kādas tās ir realitātē.

 

 

Manuprāt tikai assemblerī tā ir.   Pascal lietotāji  neko nezin par cpu reģistriem,  steku ,  interrupts,  system calls  utml.

 

Turklāt  viņi parasti  neizprot  OOP un FP  principus,  jo  paskālī  nekā tāda nav.   Pajautā paskālistam  par  polimorfismu  vai  

higher order functions  vai  pattern  matching  vai list  comprehension.    Studentiem,  kas mācās pascal   nav  nekāda nojausma,  ka tādas lietas vispār pastāv.  Piemērs, kā izglītības sistēma ražo maz-kvalificētus "speciālistus".

Labots - MarisO
Link to comment
Share on other sites

Scheme (Lisp) vai Haskell, tobiš, dekleratīvo programmēšanu

 

manuprāt  tās  nav deklaratīvas.   Prolog ir.      Clojure ir LISP.   Tur  ir   higher order funkcijas,  bet nekas "deklaratīvs". 

 

PS  es studēju LU, kad tur mācīja gandrīz tikai paskāli.   Tas (pascal  "studijas")  bija pilnīgi bezjēdzīga nodarbe un waste of time.

 

 

jārēķina ir cos(x) kvadrātā nevis pirmajā pakāpē.

 

LOL  man jau šķita,  kas tas nav  cos ! 

Labots - MarisO
Link to comment
Share on other sites

Леший

MarisO, gan haskell, gan lisp, gan erlang defaultā nav imperatīvas, visām defaultā nav state. Tātad ir deklaratīvas.

Link to comment
Share on other sites

patiesi,  es biju domājis  logic programming


 

 

diemžēl nemāca vispār - multithreading

 

 

To parasti māca kopā ar javu,  vismaz pamata līmenī.    Visi server-side java koderi  raksta pavedienus katru dienu.

Ja māca paskāli, tad gan nekā - jo tur jau nekādu pavedienu nav   (vismaz DOSiskajā paskālī, ko lieto studenti).

Bet iekš LU bija java  (tikai maģistra kursā).


 

 

Formatējums kļūst obligāts, kas uzreiz iemāca disciplīnu

 

 

disciplīna ir arī nelietot mutable variables -  vai lietot tikai tādu valodu (deklaratīvu  LOL !!!), kur variables ir single assignment only un nekādi  x=x+1 nav iespējami, turklāt tas ļauj efektīvi  uzkodēt  thread-safe kodu.       (javā to dara, visur saliekot  final , kas tomēr tāpat sūkā, jo daudzas klases ļauj modificēt to iekšējo stāvokli,  piem,  util.Date.      Es  reiz strādāju projektā,  kur idioti  bija uzrakstījuši  mutable  klasi Money,  kurā  bija "konstante"  Money.ZERO.   Vienu dienu kāds uz servera uzlika kodu,  kas to ZERO  maina  uz kautko citu.  LOL

 

+  tipisks paskālists nemaz nezin, kas ir immutable variables  un nemaz nespētu uzrakstīt kodu deklaratīvā stilā.

 

Topika autora kosinusa kods  galīgi nav deklaratīvā stilā.   (jo kodē paskālī  nevis   iekš clojure vai haskell).

Ja kods nav deklaratīvā stilā rakstīts,  tad tas tomēr nedaudz sūkā,  pat ja ir pareizs.   :)

Tas , ka tur vajag definēt variables,  neko daudz nenozīmē.  Vairumā valodu tos vajag definēt  (clojure - let blokā).

 

Es domāju, ka "disciplīnu" un kodēšanu deklaratīvā stilā iemāca tikai tādas valodas, kur nav mutable variables.  

 

Formatējums un variabļu deklarācijas vieta ir  secondary concern.

Labots - MarisO
Link to comment
Share on other sites

Inspektors Caps

Es jau gaidīju, ka MarisO apstiprinās dzīvē visu manu teikto, bet viņš pat pārsniedza visas manas cerības. :)

 

šeit laikam runa iet par to, ka matemātiski x nevar būt x+1. FP valodās (haskell, erlang un arī clojure) tas arī nav iespējams - mainīgajam nevar piešķirt citu vērtību. Manuprāt, tas ir labi un pareizi.

Nē, runa bija par to, ka pieskaitīšana un palielināšana procesoram ir divas dažādas instrukcijas. Un nekas tur nav labi. Procesors un programmas to vien dara kā maina vienu un to pašu reģistru un RAM adrešu vērtības, un tieši to mums reālajā dzīvē arī vajag.

 

Pascal taču neatbalsta OOP. Nav tur nekādas klases un objekti un polimorfisms un inheritance iespējams.

Programmēt objektorientēti var jebkurā valodā, kas atbalsta pointerus. Tie pārējie lamuvārdi nav obligāti priekš OOP un visu var lieliski izdarīt bez tiem. (Starpcitu, ir arī Object Pascal, ko izmanto iekš Delphi, kas tagad kopā ar C++ Builder atkal atdzimst, bet ne par tiem šeit runa.) Te Tu ideāli pierādīji, ka Java koderi vispār nesajēdz kas īstenībā ir OOP un ir ĻOTI ierobežoti savā domāšanas kastē.

 

Manuprāt tikai assemblerī tā ir. Pascal lietotāji neko nezin par cpu reģistriem, steku , interrupts, system calls utml. Turklāt viņi parasti neizprot OOP un FP principus, jo paskālī nekā tāda nav.

Pascal ir viena līmeņa valoda ar C. Tās abas faktiski ir augsta līmeņa vienotas sintakses asambleri, jo visam, ko uzraksti, ir skaidri "redzams cauri" kā tas tiks nokompilēts. Un 99% sistēmas lietu no mazām mikrokontrolieru firmwarēm līdz lielu OS komponentēm un draiveriem tiek rakstītas C, kas bez interruptu, steka u.c. lietu saprašanas ir neiespējami. Ne visi šo valodu programmētāji zinās tehniskās lietas, toties Java programmētāji to nezinās gandrīz neviens vispār.

 

Pajautā paskālistam par polimorfismu vai higher order functions vai pattern matching vai list comprehension. Studentiem, kas mācās pascal nav nekāda nojausma, ka tādas lietas vispār pastāv. Piemērs, kā izglītības sistēma ražo maz-kvalificētus "speciālistus".

Neuztver personīgi, bet diemžēl Tu esi šīs sistēmas ražoto "speciālistu" piemērs. Daudz Tavu nosaukto lietu kā reizi ir tās, ko ir labi pamēģināt studijās, lai attīstītu domāšanu, bet tālākas praktiskas jēgas no tām gandrīz nav. Pie tam pilnīgi visus tos konceptus vai konkrētajā gadījumā nepieciešamās nianses var bez problēmām realizēt arī C, Pascal un citur.

 

Funkcionālā programmēšana vispār neatbilst ne tam, kā strādā dators, ne tam, ko vajag operētājsistēmās, to aplikācijās, draiveros, iekārtu firmwarēs, informācijas sistēmās, web sistēmās un gandrīz visā, kas ir apkārt. Tā ir lieta priekš matemātiķiem-teorētiķiem, nevis programmatūras produktu radīšanai. Tev patīk risināt šos studentu mājasdarbus, jo pats vienkārši neesi vēlējies vai spējis tikt tālāk par šo līmeni.

Labots - Inspektors Caps
Link to comment
Share on other sites

Funkcionālā programmēšana .. ir lieta priekš matemātiķiem-teorētiķiem, nevis programmatūras produktu radīšanai.

 

 

Tas ir ļoti nepamatots uzskats.

 

  • Pasaulē (UK/US) ļoti bieži notiek dažādas FP konferences, kur piedalās software produktu radītāji,  kas FP izmanto reālos projektos.
  • FP ļauj kodu uzrakstīt kompaktāk un ātrāk, kas samazina izstrādes un uzturēšanas izmaksas.
  • FP iespējas tiek implementētas mainstream valodās (Java 8 ir pievienotas funkcijas,  closures / lambdas).
  • FP valodas tiek lietotas in production dažādās iestādēs (no bankām līdz startupiem) un to popularitāte aug.

 

 Tev patīk risināt šos studentu mājasdarbus, jo pats vienkārši neesi vēlējies vai spējis tikt tālāk par šo līmeni.

 

 

 

Es ļoti bieži clojure lietoju darbā. Kādreiz kodēju arī iekš scala.   Deklaratīvais/FP stils ļauj uzlabot produktivitāti.

 

lieta priekš matemātiķiem-teorētiķiem, nevis programmatūras produktu radīšanai.

 

 

  vai tu dzīvo kādā alā  ?

 

http://www.dailymail.co.uk   server  side  ir 100%  clojure

https://smarkets.com   -  betting exchange ir 100% erlang

http://top10.com/  100% scala

http://www.onthemarket.com/ tiek kodēts iekš  clojure

http://www.mastodonc.com/   clojure

https://www.erlang-solutions.com/

http://www.cognitect.com/

https://typesafe.com/

www.betfair.com  (scala dažos projektos  - es tur kādreiz kodēju iekš scala)

 

šo sarakstu var turpināt    :) 

 

+ iekš erlang ir tādi produkti kā  Riak datubāze  un  RabbitMQ  (kuru visi lieto)

+ microsoft pasaulē populārs ir F#

post-1765-0-30517000-1415586644_thumb.jpg

Labots - MarisO
Link to comment
Share on other sites

Studenti kodē DOSiskajā  (Turbo) Pascal,  kur nekādi objekti nav.    Vismaz kādreiz (LU) tā bija.    

Tur neviens pat nepieminēja,  ka kautkādi objekti/klases  vispār  pastāv.      :) 


 

 

draiveriem tiek rakstītas C

 

iekš C,  nevis  Pascal    :)     iekš linux kerneļa   nekāds pascal  laikam nebūs atrodams  LOL

Protams,  ka zema līmeņa programmēšanai (draiveriem) ir izmantojams C/asm,  nevis  FP vai  java  vai  pascal.

 

 

Programmēt objektorientēti var jebkurā valodā, kas atbalsta pointerus.

 

 

Jā,  OOP var implementēt jebkurā valodā, kur ir pointeri  vai funkcijas.  Iekš LISP ir pat OOP bibliotēka šādam mērķim.

Un  iekš clojure ir elementāri uzprogrammēt polimorfismu/mantošanu (turklāt dažādos veidos).   Saliec funkcijas iekš linkotiem mapiem un uzrakst metodes lookup f-ju.  Piem. var dabūt multiple dispatch,  kas nav javā.

 

Bet  tas nebūs  idiomatic tās valodas pielietojums.  

 

+ kompilatoru tad jau arī prasās mainīt,  lai tam var iebarot klases. (Iekš LISP  var  izlīdzēties  ar makrosiem).

+  un  tipu sistēmu  parasti  arī,  ja tur tādi ir.

+  un tad  jau sanāk  , ka  ir izveidota  cita  valoda.    C++ taču  arī reiz  kompilējās  uz C.   Tāpēc jau C nekļuva objekt-orientēts.  :)

Labots - MarisO
Link to comment
Share on other sites

Arī turbo paskālā ir objekti! 

http://en.wikipedia.org/wiki/Turbo_Pascal

 

Tas ka par viņiem nerunā pasniedzēji, nenozīmē ka nav!

Bet iesācējam sākt mācīties programmēšanu ar objektiem! Nu nu! 

 

Ja paskatāmies no vēsturiskā viedokļa, pirmajās programmēšanas valodās nevajadzēja definēt mainīgos un viņas izpildīja interpretatori. Tomēr pavisam drīz tika saprasts, ka kompilators ir krietni efektīvāks un mainīgos definēt vajag, kaut vai tāpēc, ka tad kompilators izķer pareizrakstības kļūdas mainīgo nosaukumos, nevis ievieš jaunus, kas ved pie grūti atrodamām loģiskām kļūdām. Bet nez kāpēc pēdējā laikā tiek spiests uz interpretējamām valodām (PHP, java) un nevajag definēt mainīgos. 

Link to comment
Share on other sites

Jā,  ir tiešām dīvaini, ka tos objektus neviens nelietoja  un  pat  tika noklusēta to esamība.  Varbūt viņi nevēlējās izskaidrot, kas ir  OOP  un pieturēties pie "standarta" Pascal / vecākas versijas.

 

Javā vajag definēt  mainīgos  (un norādīt tipu,  jo type inference tam nav).  Ruby nevajag.   Un Javā  ir JIT,  kas to kompilē darbības laikā.

 

Ruby var šādi:

class Item
  def initialize(item_name, quantity)
    @item_name = item_name
    @quantity = quantity
  end
end

Java to nevar.  http://java.about.com/od/understandingdatatypes/a/declaringvars.htm

Labots - MarisO
Link to comment
Share on other sites

Eu, džeki, marš uz spamboxu! Cilvēks nācis ar konkrētu jautājumu, a jūs te izvēršat mūžīgos karus uz 40 postiem, it kā nebūtu nekā cita par ko parunāt. Nu ja nezināt atbildi, tad klusējiet, nevis spamojiet "par un ap". Lai gan varbūt vēl paspamojiet par intel vs amd, nvidia vs ati, pc vs mac? Tik pat labi varat teikt, ka ābece nekam neder, jo, redz, māca tikai burtus, bet neko neiemāca par komatu un punktu lietošanu. Figu - ābece ir pat ļoti laba! Iziet cauri ābecei - virzās uz nākamo līmeni. Tas pats programmēšanā - iziet cauri blokshēmām, virzās tālāk. Iziet cauri paskālim, virzās tālāk. Iziet cauri multithreadingam iekš ADA - jā, virzās tālāk, nevis apstājas. Bet nevienam, atkārtoju, *NEVIENAM* nav vērts mēģināt iestāstīt kaut ko par threadiem u.c. mēsliem, kamēr nav saprašanas par to, ka nevar saskaitīt integeru ar floatu, ko pēc tam jāpareizina ar stringu (oi, pag, varbūt var tomēr - izslavētais pitons to gandrīz vai prot!!1one).

  • Patīk 3
Link to comment
Share on other sites

 

 

ja nezināt atbildi, tad klusējiet

 

te jau tika uzkodēts tas cos^2   ,  pat divās versijās. 

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...