Bună ziua și bun venit înapoi.
Această prelegere vreau să trec printr-o demonstrație de soluție a provocării noastre anterioare,
care a fost de a crea câteva funcții, în principal funcția G-DS DCD și o pereche de funcții funcționale de
valoare absolută helper într-o funcție rădăcină pătrată.
Când am creat un proiect și am fost picaninny și funcțiile proiectului vreau să închid proiectul meu existent aici,
va fi o altă aplicație consola.
Nu am ajuns într-adevăr în biblioteci sau în vreun fel de programare grafică.
Asta va fi.
Ce zici de câteva funcții?
De obicei, doriți să aveți un nume bun, dar acest lucru este doar pentru scopuri de
învățare, astfel că suntem un fel de doar furnizarea de funcții generice.
Dacă ar fi fost un program gcd, aș scrie cel mai mare divizor comun.
Dar primul lucru pe care îl vom face este că vom implementa cel mai mare program divizor comun.
Aceasta va fi o funcție care găsește cel mai mare divizor comun între două valori întregi
ne-negative și apoi returnează rezultatele.
Ar trebui să furnizăm și prototipuri de funcții, astfel încât să le putem numi și le putem plasa
oriunde în funcție.
Deci, să facem asta pentru prima funcție și este o declarație a funcției.
De ce facem o declarație a funcției, astfel încât să o putem invoca oriunde în program.
Nu trebuie să implementăm această funcție deasupra funcției principale atunci când o numim.
Este doar o practică bună, este foarte ușor să nu știi ce se întâmplă în program cu
toate declarațiile de funcții din partea de sus.
Aceasta va reveni la o furnică, astfel încât funcțiile membrilor funcția au avut primul lucru pe care îl faci este doar pentru a găsi
tipul de date care urmează să fie returnate.
DCD o va returna.
Este doar o denumire a funcției care este gcd și apoi în interiorul parantezelor sunt
date care sunt transmise gcd.
Și asta va fi și int.
Vom trece două elemente de date, astfel încât să le separăm prin virgule.
Specificăm tipul de date pentru fiecare din numele variabilei și se va spune în invidie.
Și apoi am semi-colon pentru a termina definiția funcției.
Acum îmi pot defini funcția sub cea principală și încă o pot invoca.
Puteți avea probleme.
Acum, când doriți să definiți funcția implementată, faceți aceeași funcție.
Dacă matusa ei a revenit valoarea gcd trebuie să se potrivească cu declarația în termeni de tipuri ar
putea numi altceva ca X pentru nume.
Vom fi consecvenți.
Vom spune doar că știm că este o definiție a funcției deoarece există paranteze care
definesc corpul.
Acesta este codul de implementare.
Algoritmul actual pentru gcd este destul de simplu.
Tot ce trebuie să faceți este să scrieți o buclă și să treceți prin bucla și să vă uitați la valorile de timp bazate pe restul.
Așa că am să creez o variabilă locală în interiorul funcției mele gcd.
Cum știm că este locală, deoarece este în interiorul parantezelor de la 12 la 14.
Această variabilă nu este accesibilă în interiorul funcției principale.
Este doar locala la acest bloc aici, eu voi incerca sa fac apel la tamps deoarece este local.
De asemenea, am de gând să-mi creez acum buclă I a lua pentru a utiliza o buclă în timp în bucla mea în timp
ce este doar de gând să meargă până la V.
Care ar fi cel mai mare divizor al nostru comun.
Amintiți-vă că cel mai mare divizor comun are doi parametri 100, ar lua un parametru bazat
pe ambii parametri.
Are un Algren pentru a crea pentru a găsi cel mai mare divizor divizor comun.
Deci, dacă încercăm să găsim planul că trebuie să ne asigurăm că V nu este egal cu zero.
Al doilea parametru Acesta este doar o parte standard a algoritmului.
În timp ce V nu este egal cu zero.
Vom pune paranteze pentru bucla.
Ceea ce vom face este ca vom acorda mai întâi tempo la valoarea modulului dvs Matvey.
Apoi vom spune că sunteți egali cu V și vom seta egal cu temperatura.
Pur si simplu.
Și apoi vrem să returnăm datele din această funcție.
Deci, cum vom returna datele dintr-o funcție.
Utilizăm cuvântul cheie de returnare și retur doar datele pe care dorim să le returnăm.
În acest caz vrem să vă întoarcem acum să vă amintiți că, dacă această funcție nu returnează date,
ar trebui să schimbați tipul de evitat.
Și apoi ne-am putea întoarce fără date.
Dar aceasta returnează date.
Așa că trebuie să ne potrivim.
Iată ce am spune să ne întoarcem.
Din nou, de asemenea, dacă nu am transferat date la această funcție, am putea să nu luăm ca parametri sau să-i păstrăm goale și
asta ar spune că funcția nu ia date, dar trecem două variabile și aceste variabile u și
v sunt variabile locale pentru a funcția gcd le putem folosi în interiorul funcției.
Asta e tot ce facem.
Acestea sunt toate trăsăturile unei funcții care returnează datele pe care le transmiteți folosind
variabilele locale și apoi returnează toate aceste lucruri.
Acordați atenție sintaxei cu parantezele și apoi și declarația din partea de sus.
Acum vrem să încercăm să testăm această funcție.
Așadar, vrem să o testăm pentru tot felul de lucruri diferite.
Să mergem mai departe și să ne amintim că această funcție returnează date.
Așadar, probabil că vrem să creăm o variabilă locală în principala noastră, vom
numi doar rezultatul că îl putem inițializa la 0 și apoi dorim să apelăm funcția.
Cum invocăm o funcție.
Tocmai specificăm numele funcției urmat de datele transmise acesteia.
Deoarece această funcție returnează datele, am să spun că rezultatul este egal și apoi numele funcției de
funcționare este GCD.
Și voi trece o sută cincizeci pentru primul meu test în 35 și încă două alte două sarcini pentru a
trece doar numere diferite.
Ei bine, ceea ce vreau să fac este să vreau să tipăresc datele care sunt returnate rezultatului.
Așa că am de gând să spun de imprimare că și am de gând să spun gcd de 150 și 35 este senti linia de alimentare și apoi
rezultatul
astfel linia 10 este importantă.
Obținerea datelor din gcd Deci îi atribuim unei variabile și putem apela funcția care trece
în constante aici o 14:35 am putea trece și variabilele așa cum invocăm funcția cu datele
transmise la ea este înăuntru parantezele pe care le punem valorile separate prin virgule și apoi semicolonul este
la sfârșitul lui.
Vreau să fac mai multe sarcini pe care le voi copia liniile 10 și 11 și să pun doar câteva date.
Vreau să introduc să vedem 10:26 și 405 și apoi și 83 și de fapt știi că
putem face
este să nu întoarcem variabila pe care am putea să o
punem de fapt apelul funcției în interiorul imprimării F și
să fie tipărit chiar acolo nici măcar nu trebuie să o salvați, așa că am putea spune doar gcd
83 virgulă 240 ar trebui să schimbăm toate tipăririle în ceea ce privește valorile hardcoded aici 1 0 2 6 4 0 5 și apoi și 240 și 33.
Deci, mergeți mai departe și compilați-vă că nu avem erori sau avertismente.
Nu avem erori sau avertismente, așa că hai să o executăm când o executăm.
Ar trebui să vedem cel mai mare divizor comun de trei ori pentru anumite numere.
Deci vedem că gcd de 150 și 35 este de cinci la DCD este 10:26 și 4 sau 5 este de 27 în gcd de 83 și 240 este divizorul comun al
unui mormânt înseamnă factorii care intră în acele două cifre care este cel mai înalt factor.
Deci 5 merge în 35 și 5 merge în 150.
Și asta e cea mai înaltă.
27 merge și pe 405 și 10:26. Aceasta este cea mai înaltă dintre cele două.
Se pare că funcționează.
Și am acoperit elementele de bază ale transmiterii datelor și returnării datelor.
Acum vrem să practicăm câteva alte lucruri în termeni de algoritmi și de rezolvare a problemelor.
Să creăm o altă funcție numită valoare absolută, funcția de valoare absolută va reveni la un flux și va
lua un flux care va fi o funcție foarte simplă.
Așa că vom declara funcția pe linia 5 și vom spune valoarea absolută a debitului.
Acesta este un nume urmat de parametri și vom spune doar fluxul X și apoi vom termina
unii pe care îi sun din nou, văd o declarație a funcției.
Valoarea de retur a parametrilor specifică ce tipuri de date și apoi numele funcției.
Putem apoi să mergem mai departe și să definim această funcție sub funcția gcd și va fi foarte
simplu definind funcția cu tipul care va fi returnat numele și apoi parametrul.
La fel ca și declarația, cu excepția faptului că avem acum paranteze pentru a începe codul blocului.
Acest lucru este ușor deoarece tot ceea ce trebuie să faceți este să verificați parametrul care trece și să verificați dacă acesta este
mai mic decât zero.
Dacă este mai mică decât zero, atunci vom aloca inversul care ar fi minus X, deci dacă este o valoare
minus, se va multiplica cu un minus return un pozitiv.
Și vrem să ne întoarcem datele.
Așa că vom spune returnarea x.
Un lucru pe care l-am menționat în prelegerile pe care nu le-am primit exemplul
dat a fost dacă ați întoarce toate datele, pentru că am putea avea în cele din urmă am putea avea o grămadă de declarații
și am putea reveni corect la o declarație din Egipt.
Și astfel, funcția dvs. poate, în teorie, să aibă multe declarații de returnare dacă sunt în interiorul ifs sau bucle și apoi ați putea avea unul
în partea de jos.
Problema cu aceasta este foarte greu de urmărit.
Dacă trebuie să returnați diferite părți ale codului, pur și simplu stocați datele într-o variabilă și returnați-le
în partea de jos.
Dar aici este o funcție simplă pe care tocmai o întoarcem.
Să mergem mai departe și să încercăm să folosim această funcție.
Și este foarte frumos faptul că este nevoie de flotoare astfel încât să putem folosi cu întregi și flotoare.
Așa că am de gând să creez câteva variabile aici pe care le vom trece și voi
crea,
de asemenea, un număr întreg când să fac asta în partea de sus a principalului meu adică să creez un flux pentru F1 F2
F3 și vreau pentru a crea un număr întreg și vreau să creez o altă variabilă care stochează rezultatul.
Dar trebuie să fie un flux, așa că nu trebuie să creez o altă variabilă.
Iar
acest lucru va spune doar rezultatul valorii absolute și inițializat la zero zero.
Acum vreau să invoc unitatea și să tipăresc rezultatele.
Deci vreau să copiez și să lipesc un cod aici.
Pot invoca funcția și să stochez datele returnate sau pot să le transmit doar funcției de tipărire.
Vreau să fac un cod.
Câteva comentarii aici.
Testarea funcției de valoare absolută și
atunci când utilizați asteriscurile pe o singură linie, o evidențiază un pic.
Deci, aici sunt lipite doar într-o grămadă de costuri a funcției de valoare absolută și apoi afișate unele rezultate.
Deci, aici, în 2005 pentru că eu chem la valoarea cu F wan amintesc EF 1 este un flux este egal cu
negativ cincisprezece punct cinci.
Iar când un format imprimă rezultatul și apoi voi tipări EF 1.
Așa că vom vedea dacă rezultatul se schimbă apelând funcția decât originalul.
Deci, mergând la Paul, voi tipări rezultatul chemării funcției, apoi valoarea inițială.
Acest lucru ne va spune dacă s-ar fi schimbat deloc dacă ar fi fost inițial negativ și ar fi schimbat pozitiv.
Făcând asta pe mai multe rânduri din mai multe teste și apoi
în rândul 37 Singura diferență aici este că, în loc să stochez valoarea într-o variabilă, o să o tipăresc.
Așa că trebuie să schimb rezultatele aici la variabila potrivită.
Deci, să facem asta.
Și așa, aici, vreau să spun că atunci când am scris inițial programul le-am
scris separat, așa că nu fac nici o eroare sau schimb toate cele pe
care trebuie să le schimb.
Și ar trebui să o facă.
Celelalte, de fapt, pun rezultatele tuturor variabilelor numai pe cele din linia 26.
În caz contrar, vom arăta rezultatele.
Primul arată doar că aceasta este schimbare deoarece fiecare este o valoare negativă.
Să construim asta.
Nu avem erori sau avertismente.
Rezultatul la care vrem să acordăm atenție este doar valoarea de ieșire absolută.
Așadar, ar fi mai bine să adăugăm câteva feed-uri după ce ne afișăm ultimul.
Să adăugăm o legătură pe două
linii mai ușor de citit o eroare.
Deci acum vedem că rezultatele sunt cincisprezece punct.
De fapt, schimbați-o de la un negativ la unul pozitiv, deoarece acesta a fost inițial cincisprezece punct
și toate celelalte rezultate sunt, de asemenea, valori pozitive.
Ultima instrucțiune de tipărire nu a imprimat rezultatul pe care tocmai la imprimat, valoarea returnată
din funcție arată că funcționează.
Ultima funcție pe care am vrut să o definim a fost o funcție rădăcină pătrată.
Aceasta va fi o funcție care calculează o rădăcină pătrată a unui număr și dacă va fi trecut un argument
negativ va fi afișat un mesaj în unul negativ, va fi returnat.
Deci, să definim declararea acestei funcții ca float.
Rădăcină pătrată.
Și este nevoie de un flux cu orice nume și rădăcină pătrată va folosi de fapt funcția de valoare absolută.
Deci putem să o definim deasupra ei și să o folosim încă din cauza declarației funcției.
Deci, să o definim.
Și este nevoie de un flotor.
O.K.
Așa că suntem destul de la îndemână definind aceste funcții.
Tip de date sau paranteze de retur a parametrilor.
Vom crea aici câteva variabile locale.
Acestea pot fi accesate numai în interiorul blocului.
Aceasta va ajuta doar cu algoritmul nostru rădăcină pătrată.
Veți observa aici pe liniile 59 că au atras o variabilă constantă.
Nu am vorbit despre asta, dar asta e doar modul de a crea un cost, spre deosebire
de folosirea unei variabile de tip definit, numită Epsilon.
Este punctul 0 0 1.
Ajută la calculul rădăcinii pătrate pentru a vă asigura că este într-o anumită gamă dată.
Avem un gaz care este 1. 1 și o declarație de valoare absolută aici.
De fapt, nu trebuie să furnizăm declarația, deoarece am definit-o la vârf pentru a putea face acest lucru.
Acum ne amintim că trebuie să verificăm parametrii pe care vrem să facem validarea parametrilor.
Dacă parametrul este mai mic decât zero, vrem să tipărim neg.
Imprimați un comentariu și returnați valoarea negativă.
Deci, dacă x este mai mică decât zero, tipăriți rădăcina pătrată negativă și returnați o valoare negativă.
Iată unde vom avea mai multe valori de întoarcere și vă voi arăta cum puteți reveni odată și că ați
pus-o în partea de jos.
În caz contrar, avem algoritmul nostru pentru rădăcină pătrată.
Nu voi explica algoritmul deoarece nu este perfect.
Ceea ce învățăm dar, în esență, pentru a găsi rădăcina pătrată a unui număr, putem obține valoarea
absolută a acestuia prin înmulțirea lui și apoi minus X.
Deci presupunem că vom ghici atât de inițial vom ghici și apoi vom verifica dacă este vorba.
Acesta este algoritmul de verificare dacă este clasificat.
Dacă se află într-un anumit interval și dacă este, atunci ne vom pune gazul la ceva și îl vom împărți cu doi și asta
va fi gazul pe care noi îl vom întoarce.
Deci, în partea de jos, am spune să ne întoarcem.
Da
și deci folosim funcția de valoare absolută definită mai jos, dar avem declarația noastră
de sus, deci este bine.
Un lucru aici este că avem mai multe declarații de returnare.
Acest lucru este perfect legal, dar ar trebui evitat pentru că îi ajută să fie mai greu să
devii mai greu să dai seama ce se întâmplă.
Deci, ce aș face aici este că probabil aș stoca acest negativ într-o altă variabilă decât să ghicesc ce.
Să vedem aici cum putem face asta.
Așadar, ceea ce aș face este să presupun că este inițializată la 1.
Punctul nr.
Și ne întoarcem unul negativ.
Probabil aș crea doar o altă variabilă numită valoare de returnare a debitului.
Putem seta acest punct zero la zero.
Și apoi, înainte de a reveni aici, pentru că acest lucru este sărind din funcția de matematică, pot să
spun că valoarea returnării este egală cu valoarea negativă 1. 0 în loc de întoarcere.
Apoi pot verifica și pot spune dacă o valoare de retur nu este egală cu un negativ 1. 0 deoarece nu vreau să execut acest lucru dacă am
deja invalid numărul meu nevalid numeric și aș putea împacheta acest lucru într-o declarație if și apoi ce
am putea face este că aș putea să spun.
Și apoi, în declarația timpului pot spune că valoarea returnată este egală cu estimarea.
În acest fel, mă întorc la lucrurile corecte.
Dacă a fost o intrare valabilă și apoi, în loc să vă reîntâlnesc, cred că ceea ce fac este să returnez valoarea returnată.
Și acest cod este un pic mai curat, deoarece se întoarce doar o dată în partea de jos și este clar că este mai
ușor de urmat.
Deci, valorile returnate fie negative 1.
Dacă este vorba de un argument nevalid sau va fi rădăcina pătrată, dacă nu este un
argument nevalid și am putea chiar să facem acest lucru simplu chiar dacă nu chiar verificăm valoarea
returnării aici ar fi mai ușor să spui altceva și să faci altceva parte a vieții originale.
Deci, dacă este un număr pozitiv care ar face chiar mai curat.
Acum nu avem o declarație.
Acum trebuie să încercăm.
Să mergem mai departe și să testăm acest lucru, vom chema doar o grămadă de funcții de momente de timp pe care le vom spune de testare.
Rădăcină pătrată.
Nu voi face vreun tip de imprimare fantezist aici. Mă voi asigura că pot adăuga o grămadă de feed-uri pentru a fi mai
ușor de citit.
Care este butonul de răspuns acolo.
În regulă, acum trebuie doar să faceți o grămadă de anunțuri tipărite, unde altcineva trimite unele date
nevalide bune și unele date nevalide formatate în același mod.
Să spunem doar că primul apel va fi rădăcinile
pătrate ale unor rădăcini pătrate valide.
Ei bine, mai întâi vom verifica cu un număr negativ, așa că vom spune doar trei negativi.
Ar trebui să tipăresc un aer altfel o vom testa cu niște
numere valide, așa că vom spune rădăcina pătrată de 16 și vom trece doar un Instow convertit.
S-ar putea să mă
avertizez, dar nu vreau să fiu avertizat și o să fac 165.
Acum, hai să executăm acest lucru și să îl testăm cu speranța că vom compila.
Ajungem.
Am o greșeală de scriere cu flotoare.
Acum, când o conduc, sperăm că vom obține o rădăcină pătrată.
Voi pune.
Deci, aici avem unul negativ și de fapt am imprimat scorurile negative ale argumentului, astfel că este bine.
Și apoi celelalte sunt corecte.
Cred că rădăcina pătrată corectă, așa că se pare că funcția funcționează destul de bine.
Am făcut rădăcină pătrată de 16, care este pentru 25, care este de 5 9, care este de 3 165 este de top 25.
Așa că am făcut o greșeală acolo.
Încercam să mă gândesc de 15 ori 15, ceea ce înseamnă 225 dreptate.
15
la 25.
Deci, dacă aș pune două douăzeci și cinci și aici se va întoarce ca un șurub.
Am de gând să furnizeze codul sursă pentru tine, astfel încât să puteți analiza aceasta
să înțeleagă declarațiile funcției înțeleagă cum să definească o funcție cu un tip de retur și parametrii care transmit date înțeleg
variabilele locale.
Înțelegeți cum să reveniți o singură dată în partea de jos pe care algoritmul o rezolvă.
Nu atât de important.
Sper că acest lucru a ajutat.
Mulțumesc.