Na primjeru izračuna otpora u strujnom krugu s paralelno spojenim otporima pokušati ćemo objasniti petlju

while

jer se još uvijek mučimo s njom.

 


Zadatak: Napisati program koji izračunava vrijednost otpora u strujnom krugu s paralelno spojenim otpornicima. U tom slučaju otpor je: 1/R = 1/R1 + 1/R2 + 1/R3 + ... + 1/Rn .Varijable koje ćemo koristiti su R za svaki pojedini otpor i UR za ukupni otpor u strujnom krugu. Sve te varijable će biti realni brojevi. Kako ne znamo unaprijed koliko otpornika ima, dogovoriti ćemo se da kada u petlji za vrijednost otpornika upišemo 0 to znači da je unešen i posljednji otpornik u strunom krugu.







Ukupan otpor UR moramo na početku postaviti na početnu vrijednost 0. Vrijednost otpora R ćemo postaviti na 1 i to samo zato što petlja while provjerava uvjet na početku. Ta vrijednost varijable R je samo privremena i nema utjecaj na konačni izračun otpora. U protivnom bi nam se dogodilo da se naredbe unutar pelje while niti jednom ne izvrše.



Nakon toga ulazimo u petlju while. Naredbe u petlji se izvršavaju samo ako je zadovoljen uvjet da je otpor R veći od 0.

Tada zapravo preko tipkovnice unosimo vrijednost prvog otpornika. Unesenu vrijednost kao recopročnu vrijednost 1/R dodajemo u varijablu UR koja predstavlja ukupan otpor. Te radnje će se ponavljati sve dok korisnik programa ne upiše 0 za vrijednost otpornika što znači da nema više otpornika za izračun.
Tada izlazimo iz petlje i ostalo nam je još samo u varijablu UR njenu dosadašnju vrijednost pretvoriti u recipročnu vrijednost. Ispisujemo rezultati i tu je kraj.



Ako ovo naše prvo rješenje malo logički prekontroliramo primijetiti ćemo da se u naredbi pridruživanja
UR := UR + 1 / R skriva zamka. Što kada korisnik kada je upisao sve otpornike za kraj upiše 0? Imati ćemo situaciju da će nam se 0 naći u naredbi pridruživanja i to kao 1/0 što bi bilo vrlo nezgodno. Zato ćemo našem algoritmu dodati još jednu provjeru i to ako je R > 0 tek tada pridruži recipročnu vrijednost otpora 1/R u ukupan otpor UR.



















Gornji dio algoritma nećemo mijenjati, samo ćemo unutar petlje dodati još jedno grananje u kojem ćemo provjeriti vrijednost upisanog otpora R. Ako je otpor R veći od 0 tada ćemo njegovu recipročnu vrijednost 1/R pridružiti varijabli UR. Time smo izbjegli dijeljenje s nulom.



Sada bi ovo bilo OK osim što se može dogoditi da korisnik već kod prvog otpornika upiše 0. Tada bi se dogodilo da kod pretvorbe UR u 1/UR, što moramo na kraju učiniti, opet imamo dijeljenje s 0. Taj problem ćemo riješiti na već gore opisani način tako da ćemo ugraditi još jedno grananje prije kraja u kojem će biti provjera da li je UR > 0 i tek kada je pridružiti ćemo vrijednost 1/UR varijabli UR. A kada već tako dotjerujemo program, ugraditi ćemo i brojač otpornika BO koji ćemo povećavati svaki put kada korisnik za R upiše vrijednost veću od 0. I sada kad imamo algoritam koji je prošao naše logičke kontrole, pisanje programa je prava sitnica. Naravno, u programu ćemo dodati i komunikaciju s korisnikom, tj. poruke što program radi i što se od korisnika u određenom trenutku očekuje.















Za skinuti gotov program na svoje računalo odaberite spremi cilj kao ili save target as: program
program otpori_paralelno;
uses crt;
var UR,R:real;
    BO:integer;
begin
     clrscr;
     writeln('Ovaj program racuna otpor u strujnom krugu kada su');
     writeln('otpornici u paralelnom spoju.');
     writeln;
     writeln('Otpor se racuna po formuli:');
     writeln;
     writeln('       1/R = 1/R1 + 1/R2+ ... + 1/Rn');
     writeln;
     writeln('Za kraj racunanja za vrijednost otpornika upisite 0');
     writeln;
     UR := 0;
     BO := 0;
     R := 1;
     while R > 0 do begin
           write('Vrijednost otpornika: ');
           readln(R);
           if R > 0 then begin
              UR := UR + 1 / R;
              BO := BO + 1;
           end;
     end;
     if UR > 0 then UR := 1/UR;
     writeln;
     writeln('U strujnom krugu je paraleno spojeno',BO:3,' otpornika');
     writeln('i njihov ukupan otpor iznosi ',UR:8:2,' ohma.');
     readln
end.

Ukupan otpor UR i otpor R su realni, a brojač otpornika BO je cijeli broj.

Kratak opis i poruke korisniku što i kako zapravo program radi.





Postavljamo varijable na početne vrijednosti.

Samo ako je vrijednost upisanog otpora veća od 0 tada ju pridružujemo varijabli UR i brojač povećavamo za 1.


Ako je ukupan otpor UR veći od 0 tada izračunavamo njegovu recipročnu vrijednost.
Rezultati se ispisuju bez obzira na upisane vrijednosti. Dakle, predvidjeli smo i da je spojeno 0 otpornika s ukupnom vrijednošću otpora 0.

 

Povratak na sadržaje iz informatike

Home