Gå til innhold

Hjelp til program som skal regne ut motstander i en krets


Anbefalte innlegg

Heisann, jeg har fått en oppgave på skolen der jeg skal regne ut summen av motstander i en krets.

 

Kretsen består av X antall motstander i paralell som er seriekobblet med x antall andre parallel kobblinger.

 

Det brukeren først skal gjøre er å skrive inn verdiene for motstandene i den første paralell kobblingen, brukeren skal kunne skrive inn så mange motstander han ønsker for å så skrive 0 for å gå videre til neste paralell kobbling. Han skal kunne lage så mange serier med paralell kobblinger han vil. Når han er ferdig med å skrive inn alle verider skal han avslutte ved å taste inn et negativt tall..

 

Har å gjøre oppgaven selv men har endt opp med alt for mye kode som ikke fungerer etter ønske..

 

noen som har forslag til hvordan jeg skal gå fram?

Lenke til kommentar
Videoannonse
Annonse

Beste tipset må vel være å dele opp problemet i flest mulig underproblem.

 

En parallellkobling med 3 motstander R1,R2,R3 f.eks kan jo ses på som et rekursivt kall der en først regner ut den tilsvarende R1||R2 og så beregner denne i parallell med R3.

 

En seriekobling av 3 motstander kan også ses på som en seriekobling av 2 motstander, deretter i serie med den siste motstanden.

Lenke til kommentar

Mener det enkleste vil være å dele opp slik at man regner ut hver parallell krets for så å sette disse ekvivalentene i serie til slutt.

For å regne ut motstandene i parallell:

Req = 1/(1/R1 + 1/R2 + 1/R3...)

Så gjør du abre det for alle parallell delkretsene og summerer sammen disse til slutt

Endret av _Viper_
Lenke til kommentar

Hmm, Problemet er ikke å regne ut greiene egentlig, (går første år på elektronikk ingeniør)

Men å sette opp programmet slik at jeg slipper å bruke sinnsykt med variabler.. Er det en måte å sette opp programmet slik at vi kan bruke minst mulig variabler?

 

Oppgaven ser slik ut: Oppgave 1 – Bruk av løkkestrukturer - beregning av motstandsnettverk

Vi ønsker et program som beregner totalmotstanden i et motstandsnettverk som består av en seriekopling av parallellkoplete motstander, jf. figur 1. Antall motstander i parallellkoplingene og antall parallellkoplinger er ikke kjent ved oppstart av programmet.

 

Programmet skal virke på følgende måte:

 

En motstandsverdi leses inn om gangen. Beregninger utføres etter hvert slik at motstandsverdiene ikke trenger å lagres.

 

Når innlest motstandsverdi = 0 betyr det at det er slutt på en parallell kopling.

 

Dersom innlest verdi er < 0 betyr det at det er slutt på nettverket. (PS: Programmet skal kunne avsluttes ved sette R < 0 eller ved først å sette R = 0 og deretter R < 0.)

Tips: Det er enklest å regne med konduktanser i parallellkoplingene og resistanser i seriekoplingene.

Kall programmet oo2_1.

Endret av jegerenfisk
Lenke til kommentar

Er vel ikke så veldig vanskelig

Lag en int array der du plasserer alle tallene brukeren legger inn, så når brukeren skriver inn en 0 bruker du formelen jeg skrev over for å regne ut den parallel kretsen og legger denne verdien i en variabel(la oss si ekv_res). Så fortsetter du slik og for hver 0 regner ut ekvivalent motstanden og plusser dette på ekv_res. Så til slutt printer du ut ekv_res

Lenke til kommentar

Grem det med array, så ikke siste posten hans om at regningen skal gjøres fortløpende

 

edit: Fant ut at jeg fikk prøve å gjøre det da, så tror dette skal bli rett(skrevet i python):

 

 

ekv_res = 0
par_res = 0
while (True):
res = input("Type in resistance: ")
if (res == 0):
	ekv_res = ekv_res + (1.0 / par_res)
	par_res = 0
elif (res < 0):
	if not (par_res == 0):
		ekv_res = ekv_res + (1.0 / par_res)
	break
else:
	par_res = par_res + (1.0 / res)
print ekv_res

 

 

edit2: Data_jepp, man kan vel ha dynamiske lister. I java heter det ArrayList, i c++ tror jeg det heter vector hvis jeg ikke tar helt feil

Endret av _Viper_
Lenke til kommentar
Mener det enkleste vil være å dele opp slik at man regner ut hver parallell krets for så å sette disse ekvivalentene i serie til slutt.

For å regne ut motstandene i parallell:

Req = 1/(1/R1 + 1/R2 + 1/R3...)

Så gjør du abre det for alle parallell delkretsene og summerer sammen disse til slutt

 

Den riktige regnemåten for IC og ID er vel denne:

IC = (UA-UC)/R1 + (UD-UC)/R5 + (UB-UC)/R2;

ID = (UA-UD)/R1 + (UC-UD)/R5 + (UB-UD)/R2;

Lenke til kommentar
Mener det enkleste vil være å dele opp slik at man regner ut hver parallell krets for så å sette disse ekvivalentene i serie til slutt.

For å regne ut motstandene i parallell:

Req = 1/(1/R1 + 1/R2 + 1/R3...)

Så gjør du abre det for alle parallell delkretsene og summerer sammen disse til slutt

 

Den riktige regnemåten for IC og ID er vel denne:

IC = (UA-UC)/R1 + (UD-UC)/R5 + (UB-UC)/R2;

ID = (UA-UD)/R1 + (UC-UD)/R5 + (UB-UD)/R2;

 

 

Hva er IC og ID?

 

edit: og UA, UB...UD?

Endret av _Viper_
Lenke til kommentar
Vectorer er vel strengt tatt ikke det samme som en array, en array i C++ er:

int *number = new int[20];

Hvor da number blir pekeren til denne arrayen vår. =)

Vectorer bruker man hvis man trenger nettopp dynamisk størrelse, men igjen så er arrayer raskere enn vectorer.

 

true, jeg vil tro objektet vector inneholder en array, slik er det i java i alle fall

Lenke til kommentar
Begynner å gi litt opp.. hver gang jeg tror jeg har en god plan for oppgaven så blir alt rot.. oppgaven skal inn i morgen. Noen som hadde giddet å skrive koden for meg?

 

Har du sett på koden jeg skrev da? Skulle vel være bare å skrive den om til c++...

Endret av _Viper_
Lenke til kommentar
#include <iostream>
using namespace std; 
int main()
{
float totalR = 0.0; 
float input = 0.0; 
float parR = 0.0; 
cout << "Input?\n"; 
while(1)
{
	cin >> input; 
	if (input > 0.0)
	{
		parR = parR + (1/input);  
	}
	if (input ==  0.0)
	{
		totalR = totalR + (1 / parR); 
		parR = 0.0; 
	}
	if (input < 0.0)
	{
totalR = totalR + (1 / parR); 
		break; 
	}
}
cout << "Totalmotstand: " << totalR << "\n"; 
system("pause"); 
return 0; 
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...